Задать вопрос

Как задать исключение в regex?

Есть такой скрипт:
$text = 'xn--example.com'; // пример punycode домена
$text = preg_match_all ( "/((?!-)(?!xn--)[a-zа-яё0-9-]{1,63}(?<!-)\\.)+((?!-)(?!php|xn--)[a-zа-яё]{2,12})/u", $text, $matches );

foreach ($matches[0] as $match) {
	echo $match;
}

Нужно исключать punycode домены в которых имеется "xn--". Скриптом выше исключается доменная зона, но имя по чему-то не исключается, а только обрезается на 1 символ, вот результат:
n--example.com
Подскажите как правильно прописать исключение чтобы домены с xn-- вообще не находились. И желательно чтобы в регулярном выражении не было начала и конца строки (^...$).
  • Вопрос задан
  • 1034 просмотра
Подписаться 2 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
nazarpc
@nazarpc
Open Source enthusiast
Можно ещё проще:
if (strpos($text, 'xn--') === false) {
    // Нет такого
}

Есть такой анекдот в тему:
Некоторым программистам, когда они сталкиваются с какой-то проблемой, приходит в голову такая мысль
— О, я знаю! Это можно сделать с помощью регулярных выражений!
Это означает, что у этого програмиста теперь ДВЕ проблемы.


Не переусложняйте)
Ответ написан
Комментировать
$xn = preg_match ( "/xn--/u", $text);
if($xn > 0){
// домен нам не подходит
}
else{
//домен подходит
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы