/ / php - preg_replace всі maito: теги з адресою електронної пошти - php, regex, preg-replace

php - preg_replace all maito: теги з адресою електронної пошти - php, regex, preg-replace

подібне до цього питання:

preg_match для вилучення mailto на якорі

але я намагаюся зробити глобальний рядок заміни в php, який буде конвертувати:

..href = "mailto: jeff@mycom.com"> Mailme <... (включаючи теги "a")

тільки "jeff@mycom.com" без тегів. Це має бути заміною, а не випискою.

Я використовую preg_replace, але, як і багато інших, я досить бідний на regex. Це реальний вираз, який я дійсно йду, але найкраща практика вітається, поки остаточне рішення стане зрозумілим.

Дякую!

Відповіді:

1 для відповіді № 1
<?php

$html = "<a href="mailto:jeff@mycom.com">Mailme</a> (including the "a" tags)";
$html = preg_replace("~<a .*?href=["|"]mailto:(.*?)["|"].*?>.*?</a>~", "$1", $html);
echo $html;

робоча демонстрація


0 для відповіді № 2

наступний регулярний вираз буде працювати для вас.

 preg_replace(/<a .*?href=((?:"|"))mailto:(.*?)$1[^>]*>[^<]+</a>/i, "$2", $html);

використовуйте [^ <] + між початковим і кінцевим тегом, оскільки деякіможе статися, що розриви рядків відбуваються в html, тому. * буде невдало, [^ <] + це невдача в рідкісному випадку, коли (менше ніж знак) <з'являється в тезі. Використовується прапор "i" для заміни чутливості у випадку.