Regex Menge reduzieren
-
Hallo zusammen
ich möchte einen String auf Zeichen prüfen und dafür die Gruppe "[:graph:]" nutzen, aber ohne Gänsefüßchen.
Wie krieg ich sowas hin? Ich hatte was versucht wie
([:graph:]&[^"])
aber das kommt von der Syntax her nicht hin.Das gleiche wäre z.B. [0-9a-z] aber ohne die 3 und ohne das b.
Ich will quasi eine Menge um eines oder mehr Zeichen reduzieren.
Wie würde ich sowas machen?
-
Man kann sowas mit einem look-ahead oder look-behind lösen.
In Perl ginge das so:
use 5.16.0; my $test = "blub3blux5"; $test =~ /blu(.)(?!3)[0-9a-z]/ && say $1; #hier kommt x raus (keine 3 darf folgen) $test =~ /blu(.)(?!5)[0-9a-z]/ && say $1; #hier kommt b raus (keine 5 darf folgen)
Ich hatte immer Probleme mit den REs in C++11, die haben für mich immer nicht funktioniert und ich bin dann auf boost::regex umgestiegen. Musst du mal schauen, ob das mit dem negativen look-ahead (?!hier-das-was-nicht-folgen-darf) funktioniert.
-
Ich glaube gelesen zu haben dass std::regex look-behind z.b. gar nicht unterstützt.
Ich befürchte fast ich muss die Menge selbst zusammensetzen, was schade ist.
-
Scheint aber inzwischen zu funktionieren, habs gerade mal getestet (mein Beispiel war ein negativer look-ahead, kein look-behind):
std::smatch sm; std::regex reDigitNo5("(?!5)[0-9]"); string str = "1"; std::regex_match(str,sm,reDigitNo5) (bool) true str = "2"; std::regex_match(str,sm,reDigitNo5) (bool) true str = "5"; std::regex_match(str,sm,reDigitNo5) (bool) false
-
Das ist die Lösung! Danke dir!