Мне нужно найти «http» и «https» и «email» внутри текста. Я пробовал:PHP Регулярный поиск URL и адрес электронной почты
$regex = "((https|ftp)\:\/\/)"; // http and https
$regex .= "([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)[email protected])"; // email
if(preg_match("/^$regex$/", $comment))
{
$r = 'find';
} else {
$r = 'not find';
}
со следующим текстом:
$comment = 'hello https:// and hello email [email protected]'
Но это не работает. Вероятно, из-за неправильного раскола.
Я попытался с фильтром, как это:
if (filter_var($comment, FILTER_VALIDATE_EMAIL)) {
return new \Exception('exist url');
}
, но когда у меня есть только электронная почта в комментарий фильтра, он работает и находит это письмо, если у меня есть «привет [email protected]», это не найти электронную почту.
Для фильтра FILTER_VALIDATE_URL - это не найти URL, если это так «привет Эрл https: \ привет»
Как написать правильное регулярное выражение, чтобы найти URL или адрес электронной почты в какой-нибудь текст?
'^' в начале вашего регулярного выражения означает, что совпадение должно начинаться в начале строки. Таким образом, если у вас есть другой контент до адреса электронной почты/URL, вы не должны его использовать. То же самое верно для '$' в конце шаблона - только для того, чтобы он соответствовал концу строки, а не началу. –