C# .net4.5 Regular Expressions

#3026939
Lesenswert?

Hallo,

ich verzweifle gerade bei den Regular Expression.
1
String str = "abc hallo abc du abc ich xyz";
2
Match match = Regex.Match(str, "abc.*xyz");
3
=> abc hallo abc du abc ich xyz
4

5
String str = "abc hallo abc du abc ich xyz";
6
Match match = Regex.Match(str, "abc.*?xyz");
7
=> abc hallo abc du abc ich xyz

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?
#3026957
Lesenswert?

Ich habe den Test noch einmal verändert:
1
String str = "xyz 1 abc hallo abc du abc ich xyz";
2
Match match = Regex.Match(str, "xyz.*?abc");
3
=> xyz 1 abc

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 #3026976
Lesenswert?

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).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren