Мне нужно удалить все адреса электронной почты и ссылки из строки и заменить их на «[удалено]», и я немного потерял, как это сделать.
Может ли кто-нибудь помочь мне в этом?
Благодарю.
Для этого вы можете использовать preg_replace.
для писем:
$pattern = "/[^@\s]*@[^@\s]*\.[^@\s]*/"; $replacement = "[removed]"; preg_replace($pattern, $replacement, $string);
для URL:
$pattern = "/[a-zA-Z]*[:\/\/]*[A-Za-z0-9\-_]+\.+[A-Za-z0-9\.\/%&=\?\-_]+/i"; $replacement = "[removed]"; preg_replace($pattern, $replacement, $string);
Ресурсы
Запись в PHP вручную: http://php.net/manual/en/function.preg-replace.php
Кредит, на который должен быть получен кредит: регулярное выражение электронной почты, взятое из man-страницы preg_match, и URL-адрес регулярного выражения, взятый из: http://www.weberdev.com/get_example-4227.html
Попробуй это:
$patterns = array('<[\w.]+@[\w.]+>', '<\w{3,6}:(?:(?://)|(?:\\\\))[^\s]+>'); $matches = array('[email removed]', '[link removed]'); $newString = preg_replace($patterns, $matches, $stringToBeMatched);
Примечание. Вы можете передать массив шаблонов и совпадений в preg_replace вместо того, чтобы запускать его дважды.
Ответ, который я собирался выполнить, был удален. Он связан с статьей журнала Linux. Подтвердите адрес электронной почты с помощью PHP, правильный путь, который указывает, что не так с почти каждым регулярным выражением электронной почты, которое предлагает любой.
Диапазон действительных форм адреса электронной почты намного шире, чем думает большинство людей.
Мой ответ – это вариант Josiah's /[^ /[^@\s]*@[^@\s]*\.[^@\s]*/
s]* /[^@\s]*@[^@\s]*\.[^@\s]*/
s]*\ .[^ /[^@\s]*@[^@\s]*\.[^@\s]*/
s] /[^@\s]*@[^@\s]*\.[^@\s]*/
для электронных писем, который отлично работает, но также соответствует любому puctuation после самого адреса электронной почты: демо 1
Адаптируйте регулярное выражение следующим образом: /[^@\s]*@[^@\s\.]*\.[^@\s\.,!?]*/
чтобы исключить .
,
!
и ?
: demo 2