Beat: String "mailto:" mit beliebiger Mail ersetzen?!

Beitrag lesen

bin kein Regex-Experte aber so geht es schon mal:

http://www.regex-tester.de/uc_491_de.html
Wobei ich denke, dass hier Stringfunktionen vielleicht besser wären.

Dein Regex
'#<a+.*href.*mailto.*a>+#iU'
ist suboptimal***

Deshalb euch beiden der Hinweis auf das PHP Handbuch Stichwort "Reguläre Ausdrücke".
Hier meine Verarbeitung deiner Vorlage:

'#<a+.*href.*mailto.*a>+#iU'
matcht irgend ein Element, mit a beginnend.

'#<a\s+.*href.*mailto.*a>+#iU'
macht das schon mal klarer.
Aber das folgende .* kann dann dazu führen, dass ein viel späteres href gematcht wird. Deshalb arbeit mit non greedy Operator ?

'#<a\s+.*?href.*mailto.*a>+#iU'
nach href kommt ein =, jedoch mit optionalem whitespace \s*

'#<a\s+.*?href\s*=.*mailto.*a>+#iU'
ditto nach dem =
'#<a\s+.*?href\s*=\s*.*mailto.*a>+#iU'

Der Wert der Variable kann in ' oder " stehen. ["']?
'#<a\s+.*?href\s*=\s*["']?mailto.*a>+#iU'

und wird ebenso beendet.
Wir verwenden: (["']?) ... \1
Backreferenzen.
'#<a\s+.*?href\s*=\s*(["']?)mailto.*?\1a>+#iU'

mailto ist gefolgt von :
'#<a\s+.*?href\s*=\s*(["']?)mailto:.*?\1a>+#iU'

Dazwischen steht der sensible Wert, den wir matchen wollen.
'#<a\s+.*?href\s*=\s*(["']?)mailto:(.*?)\1a>+#iU'

nach der variable darf irgend etwas kommen, das nicht > ist
'#<a\s+.*?href\s*=\s*(["']?)mailto:(.*?)\1[^^>]*a>+#iU'

bis zu einem >
'#<a\s+.*?href\s*=\s*(["']?)mailto:(.*?)\1[^^>]*>a>+#iU'

Danach folgt das Label, bezeichnend ist es irgendetwas, bis zu </a>
'#<a\s+.*?href\s*=\s*(["']?)mailto:(.*?)\1[^^>]*>(.+?)</a>#iU'

Und zum testen:

http://www.regex-tester.de/uc_492_de.html
Man beachte, welche Variablen am Ende gespeichert sind.

mfg Beat

--
Woran ich arbeite:
X-Torah
><o(((°>        ><o(((°>
   <°)))o><                      ><o(((°>o