Hallo, ich verzweifle gerade bei den Regular Expression.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
Sollte es nicht so sein, das .*? so wenig wie möglich Zeichen sucht? Aber bei mir kommt mit .* und .*? immer das gleiche heraus. Hab ich da was falsch verstanden?
|
Anzeige
|
C# .net4.5 Regular ExpressionsHallo, ich verzweifle gerade bei den Regular Expression.
Sollte es nicht so sein, das .*? so wenig wie möglich Zeichen sucht? Aber bei mir kommt mit .* und .*? immer das gleiche heraus. Hab ich da was falsch verstanden?
Gast
#3026944
Be Bo schrieb: > Sollte es nicht so sein, das .*? so wenig wie möglich Zeichen sucht? Wie kommst du da drauf? Siehe z.B. hier: http://msdn.microsoft.com/en-us/library/e347654k.aspx Ist das gleiche Beispiel, nur mit einem .+?. Bei meinem Beispiel würde ich erwarten, daß ich "abc ich xyz" zurückbekommen.
Gast
#3026952
Standardmäßig sind Regex "greedy", d.h. sie finden den Term mit der maximalen Länge... Und wofür ist dann das Fragezeichen? Ich habe den Test noch einmal verändert:
In Vorwärtsrichtung kommt das raus, was ich erwarte. Ich brauche aber einen RexEx der eine Marke am Ende findet und dann eine 2. Marke möglichst kurz davor. Also das xyz am Ende ist die Referenz und dann das nächstgelegene abc davor.
Gast
#3026960
ah, ok, sry, da bin ich von POSIX-regex ausgegangen. Hätte nochmal nachgucken sollen. Dann: keine Ahnung, versteh ich auch nicht.
Gast
#3026976
Be Bo schrieb: > Sollte es nicht so sein, das .*? so wenig wie möglich Zeichen sucht? > Aber bei mir kommt mit .* und .*? immer das gleiche heraus. bedenke dass regex immer von links nach rechts ausgeführt werden, dann passen beide operatoren, ob nun greedy oder lazy. was du möchtest heisst backtracking. .+(abc.*xyz) dürfte deinen wunsch erfüllen (im match in den gruppen schauen). A ha, danke. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|