Dies ist mein erstes Mal mit Regex in C arbeiten und ich habe einige Probleme. Ich versuche, eine Syntax zu replizieren, die in sed
verwendet wird, nämlich die s/findthisstring/replacewiththis/g
, wo findthisstring
vorhanden sein muss und replacewiththis
nicht.Posix regulärer Ausdruck funktioniert nicht in C
Die Regex kam ich mit ist ^s/(.*)/(.*)/g$
Hier ist es in meinem Code ist
int verifyPattern(char *pattern) {
regex_t regex;
int reti = regcomp(®ex, "^s/(.*)/(.*)/g$", 0);
if (reti) {
fprintf(stderr, "Could not compile regex\n");
exit(1);
}
reti = regexec(®ex, pattern, 0, NULL, 0);
if (!reti) {
puts("Match");
} else if (reti == REG_NOMATCH) {
puts("No match");
} else {
puts("Regex error");
}
return 1;
}
Ich glaube, der Teil, der oben ist Unordnung der .+
ist. Wenn ich es durch .*
ersetze, ist alles in Ordnung. Weiß jemand eine Arbeit dafür?
Danke!
Bitte geben Sie einen Testfall zu zeigen, was nicht funktioniert. –
Warum entkommst du dem Forward-Schrägstrich in der Regex. Das '/' ist kein Metazeichen in einer Regex-Engine. Außerdem ist es nicht so einfach, eingebettete reguläre Ausdrücke zu finden, wenn Sie nicht wissen, wie Sie reguläre Ausdrücke analysieren. – sln
Probieren Sie 'const char * str_regex ="^s/((\\\\. | [^ \\\\ /] +) +)/(. *)/G $ ";' –