Помогите составить рег. выражение.
Есть большой отладочный текст, из него необходимо достать 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;
Для 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]);
}
В простом тексте все адреса электронной почты можно найти с помощью
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
)
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости