Пытаюсь разобраться с регулярным выражением, которое ищет почту.
$text = 'foo foo@bar.lol bar lol baz baz@qwe.asdf qwe asdf';
if (preg_match_all('~[-a-z0-9_]+(?:\\.[-a-z0-9_]+)*@[-a-z0-9]+(?:\\.[-a-z0-9]+)*\\.[a-z]+~i', $text, $M, PREG_SET_ORDER)) {
foreach ($M as $m) {
echo $m[0] . PHP_EOL;
}
}
else echo 'not found';
Но не могу понять несколько моментов:
(?:\\. - одна часть экранирует точку,а первая со знаком вопроса и двоеточием?*@ - эта часть просто говорит, что до "собаки" любой символ?[-a-z0-9_]+(?:\\.[-a-z0-9_]+) - почему одна часть сгруппирована, а другая нет? (?:...) - незахватываемая группа. Используется что бы применить квантификатор * (0 и больше раз) к группе, отличается от обычной группировки (...) тем, что не создает ссылку и не занимается память, актуально если мы не планируем переиспользовать группу.* - это квантификатор, как написано уже в первом пункте, он относится к группе (?:\\.[-a-z0-9_]+)* и означает, что эта группа может повториться 0+ раз[-a-z0-9_]+(?:\\.[-a-z0-9_]+) - тут сложнее сказать, скорее всего из-за точки, так как перед @ должен стоять символ отличный от точки.<?php
$email = "john.doe@example.com";
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo("$email is a valid email address");
} else {
echo("$email is not a valid email address");
}
?>
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости