WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 20.03.2009, 13:51   #1
RaistlinMajere
Inventar
 
Registriert seit: 06.04.2001
Alter: 44
Beiträge: 2.343


Standard RexExp Newbie-Frage

Bevor ich jetzt noch lange rumsitze und grüble, frage ich lieber hier die Experten:

Code:
my $t = "xxxxAzz";

if($t =~ /x{2}/) {
  print "$& enthalten\n";
}
else {
  print "$& nicht enthalten\n";
}
Wieso wird hier die Bedingung erfüllt, wenn der reguläre Ausdruck doch besagt "suche genau 2 x hintereinander" und nicht "suche mindestens 2 x hintereinander" (das wäre ja {2,})?
____________________________________
"Life is like a box of rockets," said the Marine. "You never know what you´re gonna ret."
Then he pulled the trigger of his BFG9000.
RaistlinMajere ist offline   Mit Zitat antworten
Alt 23.03.2009, 11:08   #2
RaistlinMajere
Inventar
 
Registriert seit: 06.04.2001
Alter: 44
Beiträge: 2.343


Standard

anyone...?
____________________________________
"Life is like a box of rockets," said the Marine. "You never know what you´re gonna ret."
Then he pulled the trigger of his BFG9000.
RaistlinMajere ist offline   Mit Zitat antworten
Alt 24.03.2009, 23:49   #3
Yoghurt
Jr. Member
 
Benutzerbild von Yoghurt
 
Registriert seit: 28.12.2000
Alter: 48
Beiträge: 49


Yoghurt eine Nachricht über Skype™ schicken
Standard

Hi,

Code:
x{2}
trifft natürlich die 2 xx in deinem Text weil ja keine Einschränkung gegeben wurde was darauf folgen darf.

Code:
(?<!x)x{2}(?!x)
...sollte so Matchen wie du das willst (nehm ich an). Heißt soviel wie: vor 2 x'en darf kein x stehen und nachher auch nicht. Damit matched es nur wenn 2 x'en kommen und dannach ein anderer Buchstabe. Das würde bei deinem Beispiel mit dem String "xxxxAzz" kein Match bedeuten, bei z.B. "xxsxxAzz" aber schon.
____________________________________
lg Yoghurt

--
Rettet unsere Wälder, esst mehr Biber!
Yoghurt ist offline   Mit Zitat antworten
Alt 25.03.2009, 10:15   #4
RaistlinMajere
Inventar
 
Registriert seit: 06.04.2001
Alter: 44
Beiträge: 2.343


Standard

Zitat:
Zitat von Yoghurt Beitrag anzeigen
Hi,

Code:
x{2}
trifft natürlich die 2 xx in deinem Text weil ja keine Einschränkung gegeben wurde was darauf folgen darf.
das habe ich mir auch gedacht, aber das würde bedeuten daß es keinen unterschied zwischen x{2} und x{2,} gibt, welche in der literatur aber sehr wohl unterschiedlich behandelt werden.
____________________________________
"Life is like a box of rockets," said the Marine. "You never know what you´re gonna ret."
Then he pulled the trigger of his BFG9000.
RaistlinMajere ist offline   Mit Zitat antworten
Alt 25.03.2009, 12:10   #5
Yoghurt
Jr. Member
 
Benutzerbild von Yoghurt
 
Registriert seit: 28.12.2000
Alter: 48
Beiträge: 49


Yoghurt eine Nachricht über Skype™ schicken
Standard

Der Unterschied ist, das ein Ausdruck auch mehrmals matchen kann innerhalb eines Suchstrings. Und dann ergibt x{2} schon was anderes als x{2,}

x{2} (genau 2 Vorkommen von x)

xxxxxxx -> 3 Matches (xxxxxxx, xxxxxxx, xxxxxxx)

x{2,} (mindestens 2 Vorkommen von x)

xxxxxxx -> 1 Match (xxxxxxx)

Aber stimmt schon... wenn du nur auf Success abfragst (if) dann ist in dem Fall beides true.

Kann dir den RegExCoach empfehlen... da kannst du die Expressions einfach ausprobieren und er zeigt dir auch warum er was getroffen hat...
http://www.weitz.de/regex-coach/
____________________________________
lg Yoghurt

--
Rettet unsere Wälder, esst mehr Biber!

Geändert von Yoghurt (25.03.2009 um 12:17 Uhr).
Yoghurt ist offline   Mit Zitat antworten
Alt 25.03.2009, 12:43   #6
RaistlinMajere
Inventar
 
Registriert seit: 06.04.2001
Alter: 44
Beiträge: 2.343


Standard

Zitat:
Zitat von Yoghurt Beitrag anzeigen
Der Unterschied ist, das ein Ausdruck auch mehrmals matchen kann innerhalb eines Suchstrings. Und dann ergibt x{2} schon was anderes als x{2,}

x{2} (genau 2 Vorkommen von x)

xxxxxxx -> 3 Matches (xxxxxxx, xxxxxxx, xxxxxxx)
so weit war ich auch schon, nur das bedeutet ja dann, daß hier greedy gesucht wird, obwohl das nicht explizit angegeben wurde.
oder ist das bei diesem ausdruck immer der fall (so wie bei * und +)?
____________________________________
"Life is like a box of rockets," said the Marine. "You never know what you´re gonna ret."
Then he pulled the trigger of his BFG9000.
RaistlinMajere ist offline   Mit Zitat antworten
Alt 25.03.2009, 12:51   #7
Yoghurt
Jr. Member
 
Benutzerbild von Yoghurt
 
Registriert seit: 28.12.2000
Alter: 48
Beiträge: 49


Yoghurt eine Nachricht über Skype™ schicken
Standard

Das Regex default Verhalten ist immer greedy. Willst du es lazy musst du es explizit mit z.B. ? angeben.
____________________________________
lg Yoghurt

--
Rettet unsere Wälder, esst mehr Biber!
Yoghurt ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:24 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag