URL: https://www.overclockers.at/coding-stuff/frage_zu_reg_exp_54924/page_1 - zur Vollversion wechseln!
Was hat dieses Suchmuster für einen Sinn?
'#\{(([a-z0-9\-_]+?\.)+?)([a-z0-9\-_]+?)\}#is'
Also im Allgemeinen sucht das Trum nach beliebigem Text der zwischen {} steht und Leerzeichen und Punkte beinhalten kann, soweit ich das kapiert hab. Was mich aber verwirrt ist das '+?'.
'[a-z0-9]+' sucht zb nach beliebig vielen Buchstaben oder Zahlen. Nur was ändert sich bei '[a-z0-9]+?'? Sind das dann beliebig viele oder keine?
Und was machen '#' und '#is' am Anfang bzw. am Ende?
+ heißt einmal oder öfter. Zur Vollständigkeit:
? einmal oder keinmal
* beliebig oft
# sind einfach die Begrenzer, so wie normalerweise /
Die Modifiers i und s musst nachschauen. i ist case insensitive, hätt ich gesagt, aber ich weiß jetzt nicht sicher. Schau nach und informier mich
Ok, ich schau was ich finden kann
Dass + einmal oder öfter ist weiß ich, war auch nicht die Frage
Ich wollt wissen was dass ? in '+?' für einen Sinn hat.
Ah sorry. Seh ich erst jetzt. Hmm, weiß ich auch nicht.
Modifier:
i
Dies ist der wohl am meisten gebrauchte Modifier. Bei regulären Ausdrücken wird standardmäßig zwischen Groß- und Kleinschreibung unterschieden - dieser Modifier schaltet dies aus.
s
Der s-Modifier veranlasst den Parser dazu, die Zeichenkette, auf die der reguläre Ausdruck angewendet wird, in einzelne Zeilen zu unterteilen - das Pattern wird hierbei also nicht auf die ganze Zeichenkette bezogen, sondern jede Zeile einzeln behandelt
m
Der m-Modifier ist das Komplement zum s-Modifier: Die Zeichenkette wird nicht in Zeilen aufgetrennt, sondern im Ganzen behandelt.
Quelle: http://www.devmag.net/webprog/regulaere_ausdruecke.htm
Was +? mach weiß ich immer noch nicht. Hab bis jetzt nur gefunden, dass es eignetlich nicht vorkommen darf
EDIT: Die Page da oben ist ganz nett Habs endlich gefunden:
ZitatStandardmäßig versuchen die Quantifier, auf einen so großen Text wie möglich zu passen. Dies kann zu Problemen führen: Angenommen es liegt eine Zeichenkette $str = "[b_]text[/b_]text[b_]text[/b_]" vor, und wir möchten daraus "<b>text</b>text<b>text</b>" machen. Versuchen wir es folgendermaßen:
$str = preg_replace("!\[b\](.*)\[/b\]!","<b>text</b>",$str);
so erhalten wir als Ergebnis "<b>text[/b]text[b]text</b>" - nicht ganz das, was wir wollten. Um dieses Verhalten abzustellen, setzen wir hinter den Quantifier ein Fragezeichen "?":
$str = preg_replace("!\[b\](.*?)\[/b\]!","<b>text</b>",$str);
und das gewünschte Ergebnis ist erreicht!
Aso, da gibt's auch einen globalen Modifier dafür, den Greediness Modifier.
+? ließt man einfach von links nach rechts. + heißt, der Ausdruck kann 1 oder mehrere male vorkommen ? heißt der Ausdruck kann 1 mal oder gar nicht vorkommen.
Wenn man das kombiniert, heißt das, der []-Ausdruck kann man 1 oder mehrere male nehmen und diesen wiederum 0 oder 1 mal.
Somit ist +? äquivalent zu *. (Würd ich mal sagen)
Wenn du dir das ganze in Form von einem Syntxdiagramm ansiehst ist es eigentlich ganz logisch.
Ja. As Ringding said, ein Greediness Modifier. Nur halt nicht global
Ist allerdings != "*.", da "." für ein Zeichen steht, aber kein Quantifier ist - imho.
Ähm, der "." war als Satzzeichen gemeint und nicht zu "*" gehörend...
dann musst du ihn aber escapen - sprich \.Zitat von M.I.P.S.Ähm, der "." war als Satzzeichen gemeint und nicht zu "*" gehörend...
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025