Question
Je veux remplacer tous les « mailto: » liens en html avec des e-mails simples.
In: text .... <a href="mailto:somebody@example.org">not needed</a> text
Out: text .... somebody@example.org text
Je l'ai fait:
$str = preg_replace("/\<a.+href=\"mailto:(.*)\".+\<\/a\>/", "$1", $str);
Mais il échoue s'il y a plusieurs e-mails en chaîne ou html dans « une » balise
In: <a href="mailto:hello@somedomain.org">not needed</a><a href="mailto:somebody@example.org"><font size="3">somebody@example.org</font></a>
Out: somebody@example.org">
La solution
Faites votre correspondance non gourmand en ajoutant ?
à quantificateurs +
et *
comme:
$str = preg_replace("/\<a.+?href=\"mailto:(.*?)\".+?\<\/a\>/", "$1", $str);
échapper, vous devez également pas <
et >
et comme il y a une /
dans le modèle de son mieux d'utiliser un séparateur différent et puisque vous ne faites pas une interpolation variable à l'intérieur du motif, il n'y a pas besoin de l'enfermer dans "
cette vous évitez ainsi échapper à "
l'intérieur du motif:
$str = preg_replace('#<a.+?href="mailto:(.*?)".+?</a>#', "$1", $str);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow