Vorrei abbinare tutte le righe che iniziano con una determinata parola, ad esempio iheap. Se non sbaglio, l'espressione regolare (nella sintassi ECMAScript) "^iheap.*"
dovrebbe fare il trucco. Tuttavia, quando ho provato questo in C++ 11 usando la libreria regex di libC++, solo la prima riga è abbinata. Pertanto, "^..."
sembra corrispondere solo all'inizio di input anziché all'inizio della riga.Corrispondenza "inizio riga" utilizzando libge ++ regex library (C++ 11)
Ecco un esempio:
#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;
}
uscita:
iheap says hello.
iheap says hello again.
IHEAP
iheap says hello again.
Questo è un bug di libC++ o sto facendo qualcosa di sbagliato? Grazie!
Nota: Sto usando Mac OS X Mountain Lion e Apple LLVM Compiler 4.0 (fondamentalmente un'istantanea di clang 3.1 SVN).
appena inciampato su questo problema ... fyi, boost :: regex (in modalità EMCAScript) corrisponde all'inizio della linea, vale a dire la tua regex funzionerebbe. – fscan
Hrmm, solo leggermente correlato, ma '$' non corrisponde a' \ r \ n' in VS2013 - ci vuole '\ s * $' o simile per corrispondere ... – Cameron