2009-04-01 4 views
0

У меня есть некоторое регулярное выражение (например,^\ w + [\ w-.] \ @ \ w + ((- \ w +) | (\ w)). [Az] {2,3} $, чтобы соответствовать правильным письмам), но я не могу понять, как удалить все, что не соответствует регулярному выражению в моей строке.Regexp: как удалить все, кроме другого регулярного выражения?

Сохраняя пример электронной почты, я нужен способ, учитывая острую боль, как

$myString = "This is some text, the email is here [email protected], and other things over here"; 

мне нужно вернуть только «[email protected]», или логическое значение FALSE, если нет электронной почты в строки.

Конечно, электронная почта это просто пример, некоторые другие времена, мне нужно, чтобы удалить все, кроме целых/числами с плавающей и т.д ...

Я гугле вокруг так много, но не нашли что-нибудь.

ответ

4

Если окружить регулярное выражение в скобках и использовать preg_match или preg_match_all он будет возвращать только часть строки, которая была совпавшей с регулярным выражением:

$myString = "This is some text, the email is here [email protected], and other things over here"; 
preg_match("/(\w+[\w-.]\@\w+((-\w+)|(\w)).[a-z]{2,3})/", $myString, $matches); 
print_r($matches); 

Примечание Я также снял начало и конец строковые разделители, так как в этом случае они не нужны.

1

Используйте preg_match_all function для соответствия всем вхождению. Функция preg_match_all сама возвращает количество совпадений или false, если произошла ошибка.

Итак:

$myString = "This is some text, the email is here [email protected], and other things over here"; 
if (($num = preg_match_all('/\w+[\w-.]\@\w+((-\w+)|(\w)).[a-z]{2,3}/', $myString, $matches)) !== false) { 
    echo $num.' matches have been found.'; 
    var_dump($matches); 
} else { 
    // error 
} 
0

Ваше регулярное выражение должно иметь $ и^удалены для того, чтобы работать, эти символы не могут быть найдены в середине строки. Если ваше регулярное выражение соответствует, оно не может содержать ничего, кроме электронной почты.

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