Php Простое регулярное выражение на поиск e-mail

202
28 января 2019, 19:20

Помогите составить рег. выражение.

Есть большой отладочный текст, из него необходимо достать email в рамке "for" и ";" (внутри должен быть мейл, наверное достаточно проверки на существование @), выглядит текст примерно так:

Foreigners is still taking the decision on Your case. Thus today 04.10.2018, we 
sent a written request about the phase; for sacri.subba@yahoo.com;
text text text ... for today you; other e-mail test@mai.com;
Answer 1

Для email достаточно простейшей проверки на формат ввода (наличие собачки и домена):

"^for [a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+;$"

Этой регуляркой найдёшь строчку, где содержится нужный тебе фрагмент for user@example.com. Далее можно сделать explode() этой строчки по пробелу и найти строку, соответствующую почте:

"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$"

Рабочее решение, полученное опытным путём:

$pattern = '/for [A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\;/ui'; 
preg_match($pattern, $text, $res);
if ($res) {
    $email = str_replace(';', '', explode(' ', $res[0])[1]);
}
Answer 2

В простом тексте все адреса электронной почты можно найти с помощью

preg_match_all('~\bfor\s+\K\S+@\S+\.\S+\b~u', $s, $matches)

См. демо регулярного выражения.

Подробности

  • \bfor - целое слово for
  • \s+ - один и более пробельных символов
  • \K - удаляем весь найденный до сих пор текст из совпадения
  • \S+@\S+ - один и более символов, отличных от пробельных, @ и снова один и более символов, отличных от пробельных
  • \. - точка
  • \S+ - один и более символов, отличных от пробельных
  • \b - граница слова.

PHP:

$s = <<<INPUT
Foreigners is still taking the decision on Your case. Thus today 04.10.2018, we 
sent a written request about the phase; for sacri.subba@yahoo.com;
text text text ... for today you; other e-mail test@mai.com
for  another###test@mai.com
INPUT;
if (preg_match_all('~\bfor\s+\K\S+@\S+\.\S+\b~u', $s, $matches)) {
    print_r($matches[0]);
}

Результат:

Array
(
    [0] => sacri.subba@yahoo.com
    [1] => another###test@mai.com
)
READ ALSO
SQL выборка дубли связной таблицы

SQL выборка дубли связной таблицы

помогите исправить выборку которая считает количество заказов с авансом есть выборка

211
PHP Session и Unity3d

PHP Session и Unity3d

Делаю регистрацию/авторизацию в приложении на Unity3d в связке с сервером на PHP+MySQLВстал вопрос: как мне связать переменную session с unity3d? Пример...

163