phpbar.de logo

Mailinglisten-Archive

[php] 1/2 OT - Regex Abbildung von "Kein Zeichen"

[php] 1/2 OT - Regex Abbildung von "Kein Zeichen"

Yannik Hampe yannik at cipher-code.de
Fre Dez 8 17:05:40 CET 2006



Tim wrote:
> Hallo Yannik,
> hallo Sebastian und Vitalis,
> 
> erst einmal Danke für Eure Beiträge... 
> 
> 
>> preg_match_all('/<.*?(?:src|href)=(?:"|\')?([^\'"]+)(?:"|\')?.*?>/im',
> 
> Was bedeutet denn (?:src|href)   ?
> oder überhaupt ?:
> 
> (src|href) habe ich ja verstanden. Optional könnte man das ja auch
> verallgemeinern, wie man unten sieht. Aber gerade das vorngestellte ?: ist
> bei mir noch nicht angekommen. Gibt’s da was im Web zu genau diesem Thema? 

Auf www.regenechsen.de ist eine ganz nette kleine Übersicht (und
übrigens auch ein gutes Tutorial).
Besonders die Überischt hier ist mir immer wieder nützlich:
http://www.regenechsen.de/phpwcms/index.php?regex_allg_liste

das ?: direkt hinter einer sich öffnenden Klammer führt dazu, dass
dieses Subpattern nicht registriert wird.
Also
String: abdgf
regex1: ab(.)gf
regex2: ab(?:.)gf

Beide regexe würden auf den String passen. Doch regex1 gibt ein
Subpattern zurück, in dem d steht und regex 2 tut dies nicht.

> 
>> Sowas würde der regex aber verpatzen:
>> <img src="bla'blubb">
>> mal abgesehen, dass das so nur mit dem <img>-tag uns wenigen 
>> Eigenschften funzt. Dieser regex sollte es aber tun:
>> <(\w+)(?:\s+(\w+?)=(?(?=")"(.*?)"|(?(?=')'(.*?)'|(\w+))))*\s*(\w*)
> 
> OK... Ich werde es mal ausprobieren... :-) Obwohl ich da eigentlich gerade
> gedanklich aussteige. 

Irgendwann sieht man nur noch backslashes, Sterne, Punkte, Klammern und
vorallem Fragezeichen *gg*.
Gönn dir mal 'ne Pause, dann klappt das schon :-).
> Grüße Tim
> 
Yannik

php::bar PHP Wiki   -   Listenarchive