Hey Community,
Ich muss mir ein RegExp zusammenbasteln das folgedens beachtet:
Suche "//" im Text. Darf aber nicht bei "*//*" anspringen und bei "*///" nicht auf die ersten zwei Slash. Hab schon einige ausprobiert aber ich bekomms einfach nicht hin.
einer meiner Ansätze: /(//)|.*[^*](//)|^(//)
Sollte jetzt die Regeln wie oben beschrieben beachten aber ich möchte nur ein Capured haben. Wenn ich versuche eine große Klammer ausenrum zusetzen dann stimmt nichts mehr.
Weis wer Rat?
Hilfe bei Regulären Ausdruck
Re: Hilfe bei Regulären Ausdruck
Was ist denn mitAlex66955 hat geschrieben: Ich muss mir ein RegExp zusammenbasteln das folgedens beachtet:
Suche "//" im Text. Darf aber nicht bei "*//*" anspringen und bei "*///" nicht auf die ersten zwei Slash.
Weis wer Rat?
Code: Alles auswählen
[^*]//|^//hier hab ich keine Klammern eingebaut, denn wozu brauchst du den Capture, wenn du vorher weisst, dass es "//" ist?!
\Ralf
Aber bei deinem Code matched er die drei letzen Slash´s mit also stimmt die Positionsangabe auch nicht mehr. Wie oben beschrieben darf es nicht auf die ersten zwei Slash anspringen sondern auf die letzten zwei.
Kann es sein das dies garnicht mit regex zu lösen ist?
Code: Alles auswählen
"/*text*///Text"Kann es sein das dies garnicht mit regex zu lösen ist?
Versuch 1:
(?!\*)//
Geht nicht. In der Doku gibt es ein Beispiel für negative lookahead assertions:
"&(?!amp;)" soll das "&" in "&bla" aber nicht in "&" matchen. OK.
Umgedreht geht das aber nicht:
"(?!amp;)&" matched "&" in "amp;&", da ja nicht gesagt wird, dass er von Vorne gucken soll: D.h. er beginnt kurz vor dem "&", da ist ja nichts (oder zu wenig), und nichts ist auch ungleich "amp;" - allerdings könnte man dieselbe Begründung für die rechte Seite nehmen, man hört einfach vorher auf zu suchen. Das scheint mir nicht ganz sauber definiert zu sein.
Das erklärt jedenfalls wieso ein negativer lookahead mit "*" nicht einfach funktioniert.
Geht aber auch anders:
Versuch 2:
(?=^|[^\*])//
Komischerweise funktioniert das auch nicht ("//" in "*//" wird gemached, dabei steht im pattern, dass vor den slashes der textbeginn oder ein zeichen != "*" stehen muss), scheint also wieder ein Fehler oder eine unsaubere Spezifikation oder Dokumentation zu sein, denn dasselbe mit einer non-capturing Klammer funktioniert:
Versuch 3:
(?:^|[^\*])(//)
cap(1) ist hier das gewollte Ergebnis. Denke das ist nicht vollständig, genügt aber deiner Spezifikation.
Ansonsten ist das RegExp-Beispiel von Qt gut zum Herumexperimentieren.
MfG,
FaS
(?!\*)//
Geht nicht. In der Doku gibt es ein Beispiel für negative lookahead assertions:
"&(?!amp;)" soll das "&" in "&bla" aber nicht in "&" matchen. OK.
Umgedreht geht das aber nicht:
"(?!amp;)&" matched "&" in "amp;&", da ja nicht gesagt wird, dass er von Vorne gucken soll: D.h. er beginnt kurz vor dem "&", da ist ja nichts (oder zu wenig), und nichts ist auch ungleich "amp;" - allerdings könnte man dieselbe Begründung für die rechte Seite nehmen, man hört einfach vorher auf zu suchen. Das scheint mir nicht ganz sauber definiert zu sein.
Das erklärt jedenfalls wieso ein negativer lookahead mit "*" nicht einfach funktioniert.
Geht aber auch anders:
Versuch 2:
(?=^|[^\*])//
Komischerweise funktioniert das auch nicht ("//" in "*//" wird gemached, dabei steht im pattern, dass vor den slashes der textbeginn oder ein zeichen != "*" stehen muss), scheint also wieder ein Fehler oder eine unsaubere Spezifikation oder Dokumentation zu sein, denn dasselbe mit einer non-capturing Klammer funktioniert:
Versuch 3:
(?:^|[^\*])(//)
cap(1) ist hier das gewollte Ergebnis. Denke das ist nicht vollständig, genügt aber deiner Spezifikation.
Ansonsten ist das RegExp-Beispiel von Qt gut zum Herumexperimentieren.
MfG,
FaS