String "mailto:" mit beliebiger Mail ersetzen?!
Zerko
- php
Mahlzeit...
Ich möchte ein kleines PHP Script schreiben, mit welchem ich die Stellen in einem String, an denen ein Link auf eine E-Mail Adresse gesetzt wird ersetze.
Die Verlinkung ist stets, wie folgt angegeben:
<a href="mailto:info@dasisteinebeispieldomain.de">mail</a>
Hierbei möchte ich nicht nur die Verlinkung ändern, sondern den gesamten "<a ..></a>" Tag suchen und ersetzen.
Wahrscheinlich sollte man hier "regular expression", aber ich hab dies leider noch nie benutzt, so dass ich auf euere Hilfe hoffe.
Danke und Gruß,
Zerko
Hi,
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.
Timo
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
Hi,
Dein Regex
'#<a+.*href.*mailto.*a>+#iU'
ist suboptimal***
sagt ja bereits bin kein Experte.
Deshalb euch beiden der Hinweis auf das PHP Handbuch Stichwort "Reguläre Ausdrücke".
Ich werde die thematik niemals lernen, habe es schon oft versucht und schaffe es dann sogar schon in Bereiche wie lookahead und lookbhind, usw.
Aber schon nach ein paar Wochen habe ich immer wieder alles vergessen und befinde mich wie jetzt auch wieder auf absolutem Anfängerniveau.
Der Versuch meine Lernerfolge zu dokumentieren war auch zwecklos, denn nachher versteh ich gar nicht mehr was ich das eigentlich geschrieben hatte. Na ja C'est la vie
Wollte hier auch nur einen schnellen Ansatz geben, im Bewusstsein, das schon was Vernünftiges folgen wird;-)
Aber ist Regex hier sinnvoll oder doch besser Stringfunktionen?
Und zum testen:
http://www.regex-tester.de/uc_492_de.html
Man beachte, welche Variablen am Ende gespeichert sind.
Hatt du jute macht;-)
Timo
Aber ist Regex hier sinnvoll oder doch besser Stringfunktionen?
Ich bin von Perl regex Syntax verwöhnt. Sobald du einen variablen Content suchst, sind REs gefragt. Eine ausnahme besteht nur dann, wenn du zwischen einem kleinen Set von bekannten Alternativen auszuwählen hast, dann sind string funktionen wohl geeignet. (Bei perl z.B. index() )
Im vorgegebenen Fall, wo eine definierte Adresse zu suchen ist, dürfte PHP str_replace() oder str_ireplace richtig sein.
mfg Beat