Saludos,
- Anda! en ninguno de mis libros en español he encontrado algo sobre expresiones regulares en C++
, he tenido de echar mano de este otro buen libro en Inglés The C++ Standard Library 2nd Edition:
https://www.mica.edu.vn/perso/Vu-Hai/EE3490/Ref/The%20C++Standard%20Library%20-%202nd%20Edition.pdf pág 717 (Chapter 14 Regular Expressions) Wow, la verdad está explicado muy bien, fácil de entender, bastante ejemplificado y práctico, comparándolo con los enigmáticos libros de Bjarne Stroustrup, pues puede ser el creador y todo pero sus libros no son sencillos de comprender
name Turing
key (31)
name Pepe
key (54)
name Vlad
key (12)
#include <iostream>
#include <fstream>
#include <regex>
using namespace std;
int main() {
ifstream file("example.txt");
regex n("(^name\\s)(\\w+)");
regex k("(^key\\s\\()(\\d+)(\\))");
smatch m;
string line;
while ( getline(file, line) ) {
if ( regex_search(line, m, n) ) {
cout << m[2] << endl;
} else if ( regex_search(line, m, k) ) {
cout << m[2] << endl;
}
}
file.close();
return 0;
}
C:\Users\EdSon\Desktop>g++ regex.cpp -o regex.exe && regex.exe
Turing
31
Pepe
54
Vlad
12
C:\Users\EdSon\Desktop>
Buenas, gracias por contestar.
La cosa se complica con el siguiente ejemplo:
A : in XXX (31 downto 0);
B : in XXX (6 downto 0);
Aqui XXX puede ser en cada linea una palabra diferente, pero no hay problema, consigo sacarla.
La cosa es sacara ese 31 y 6 que van despues del (, al igual que no puedo hacer referencia o eso creo a XXX ya que va cambiando por cada fila
regex e("\\b(in )([^ ]*)");
regex r("\\b(out )([^ ]*)");
smatch m;
regex p("\\()(\\d+)(\\)");
for (int j = 0; j < ioput[i].icont; j++) {
getline(archivo, s);
while (std::regex_search(s, m, e)) {//aqui saco XXX
for (auto x : m) {
aux = x;
}
ioput[i].input[j].type = aux;
std::cout << std::endl;
s = m.suffix().str();
}
//Aqui s tiene como valor (31 down to 0)
while (std::regex_search(s, m, p)) {//aqui buscaria el 31 despues del ( pero me da error al inicializar p
for (auto x : m) {
aux = x;
}
ioput[i].input[j].longitud = stoi(aux);
cout << ioput[i].input[j].longitud;
std::cout << std::endl;
s = m.suffix().str();
}
}