2016-06-30 1 views
0

Мне нужно найти «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 или адрес электронной почты в какой-нибудь текст?

+0

'^' в начале вашего регулярного выражения означает, что совпадение должно начинаться в начале строки. Таким образом, если у вас есть другой контент до адреса электронной почты/URL, вы не должны его использовать. То же самое верно для '$' в конце шаблона - только для того, чтобы он соответствовал концу строки, а не началу. –

ответ

2

В этой строке

if(preg_match("/^$regex$/", $comment)) 

у вас есть ^ затем $regex и $. ^ означает только совпадение в начале строки. $ означает только совпадение в конце. Поэтому это будет соответствовать только если эта строка содержит только матч и ничего больше.

Удалите его, чтобы получить спички в любой точке линии.

if(preg_match("/$regex/", $comment)) 

Однако я бы предложил просто найти библиотеку, которая предлагает соответствующее вам совмещение. В библиотеке будет проведено гораздо больше тестов, чтобы покрыть крайние случаи и другие вещи, которые легко упустить.

 Смежные вопросы

  • Нет связанных вопросов^_^