Me gustaría hacer coincidir todas las líneas que comienzan con una palabra dada, digamos iheap. Si no me equivoco, la expresión regular (en sintaxis de ECMAScript) "^iheap.*"
debería ser la solución. Sin embargo, cuando probé esto en C++ 11 usando la biblioteca de expresiones regulares de libC++, solo la primera línea coincide. Por lo tanto, "^..."
parece coincidir solo con el inicio de la entrada en lugar del principio de la línea.Coincidencia de "principio de línea" con libC++ biblioteca de expresiones regulares (C++ 11)
Aquí se muestra un ejemplo:
#include <string>
#include <regex>
#include <iostream>
using namespace std;
int main() {
regex rx("^iheap.*");
string s = "iheap says hello.\niheap says hello again.\n";
cout << s << regex_replace(s, rx, "IHEAP");
return 0;
}
Salida:
iheap says hello.
iheap says hello again.
IHEAP
iheap says hello again.
Es esto un error de libC++ o algo mal lo estoy haciendo? ¡Gracias!
Nota: Estoy utilizando Mac OS X Mountain Lion y Apple LLVM Compiler 4.0 (básicamente una instantánea de clang 3.1 SVN).
acaba de tropezar con este problema ... fyi, boost :: regex (en modo EMCAScript) coincide con el principio de línea, es decir, su expresión regular funcionaría. – fscan
Hrmm, solo ligeramente relacionado, pero '$' no coincide con '\ r \ n' en VS2013 - se necesita' \ s * $ 'o similar para que coincida ... – Cameron