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