Matthias Reitinger
ɐɯıǝɹ
Standardmäßig werden mit runden Klammern versehene Bereiche eines regulären Ausdrucks als Gruppe behandelt. Diese Gruppen tauchen dann in der Trefferliste gesondert auf.Neurodeamon hat gesagt.:Welchen Effekt hat eigentlich
Code:?:,
Als Gelegenheits-Regexer (oder Nur-Wenn-Es-Sich-Nicht-Vermeiden-Läßt Regexer) verstehe ich das nicht ganz. Ich habe nachgeschlagen und »Non-grouping version of regular parentheses« sagt mir nix
Beispiel:
PHP:
preg_match('#ab(cd)(ef)#', 'foo abcdef bar', $matches);
print_r($matches);
Code:
Array
(
[0] => abcdef
[1] => cd
[2] => ef
)
Manchmal braucht man Gruppen aber nur, um einen Teil des Ausdrucks vom Rest abzutrennen (bspw. in Verbindung mit einem Oder-Konstrukt). In solchen Fällen ist es oft unerwünscht, dass diese Gruppe dann in der Trefferliste aufgeführt wird (weil sie zur Weiterverarbeitung nicht gebraucht wird). Um das zu verhindern, kann man die Zeichenfolge ?: direkt nach der öffnenden Klammer notieren.
Beispiel: Nur den Hostnamen aus HTTP(S)- und FTP-URIs extrahieren:
Code:
\b(?:https?|ftp)://([0-9a-z\.]+)