Spezielle Zeichenkette per Regex finden

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 :)
Standardmäßig werden mit runden Klammern versehene Bereiche eines regulären Ausdrucks als Gruppe behandelt. Diese Gruppen tauchen dann in der Trefferliste gesondert auf.

Beispiel:
PHP:
preg_match('#ab(cd)(ef)#', 'foo abcdef bar', $matches);
print_r($matches);
Ausgabe:
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\.]+)
Kannst ja mal spaßeshalber das ?: weglassen, um den Effekt zu beobachten :)
 
Zurück