Tom: Reguläre Ausdrücke - String ausschließen

Beitrag lesen

Hello,

a(?:rea)?

matcht dasselbe, ist aber effizienter.
(?:) gruppiert, ohne daß der entsprechende Teilstring gemerkt wird (das Merken kostet, sollte also auch nur gemacht werden, wenn's wirklich gebraucht wird).

Ist es von Relevanz, dass nachher noch eine Backreferenz darauf gerichtet ist?

auf das 'rea'? Wohl kaum.
Die Capturing Klammern, die um das 'a(?:rea)?' bzw. 'a|area' außenrum sind, haben damit nichts zu tun.

Na eben!
Das ?: führt ja auch dazu, dass das Argument _nicht_ in die Ergebnismengen aufgenommen wird.

Ich hole mal das vorläufige Ergebnis dieser Show aus dem anderen Thread:
Damit wird das hier zu einem micht klassischem Doppelposting. Sorry, aber es ist ja noch nicht geklärt...

#----- matcht alle Links MIT Häkchen und ohne JavaScript usw. -----------------------------------

$pattern1= '#<(a|area)\s*.*href=("|')(?!javascript:|mailto:)(\S*)\2\s*([^>]*)>(.+)</\1>#Ui';

#------------------------------------------------------------------------------------------------

#----- matcht alle Links OHNE Häkchen und ohne JavaScript usw. ----------------------------------

$pattern2= '#<(a|area)\s*.*href=(?!"|'|javascript:|mailto:)([^\s]*?)(?<!"|')\s*([^>]*)>(.+)</\1>#Ui';

#------------------------------------------------------------------------------------------------

das (a|area) wird hier benötigt, um nachher auch den Linktext einfangen zu können, nicht nur die url. Und dazu wird eine Backreferenz benutzt. Die ist aber nicht möglich, wenn Du die von Dir vorgeschalgene Variante benutzt.

Ich habe es bisher nicht geschafft, die beiden Teillösungen einer Gesamtlösung zusammenzuführen.

Harzliche Grüße aus
Sankt Andreasberg
und Guten Rutsch

Tom

--
Nur selber lernen macht schlau