#php #regex #preg-match
#php #регулярное выражение #preg-match
Вопрос:
Базовый URL для сопоставления — http://testdomain.com .
Условие для выполнения- url "could" contain a subdomain from 3 to 10 characters length, for example: http://sub.testdomain.com
У меня есть это прямо сейчас-
$string = 'http://testdomain.com';
if(preg_match('/^(http)://(([a-z]{3,10})?[.])?(testdomain.com)/i', $string)) {
echo 'Good';
} else {
echo 'Bad';
}
Вышеуказанное условие http://.testdomain.com
также соответствует, что было бы неверно.
Итак, поддомен (‘sub’ в http://sub.testdomain.com ), если таковой имеется, должен иметь длину от 3 до 10 символов и сопровождаться символом . и затем testdomain.com
Ответ №1:
Как насчет того, чтобы сделать всю часть поддомена необязательной с использованием нулевого или множественного соответствия *
. Это будет соответствовать как обычному домену, так и поддомену, но не с отдельным .
символом для части поддомена. СМ.
https?://([a-z0-9] [.])*testdomain[.]com
$re = '/https?://([a-z0-9] [.])*testdomain[.]com/i';
$str = ' http://testdomain.com
http://.testdomain.com
http://sub.testdomain.com';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
Комментарии:
1. Это указало мне в правильном направлении. Я использую? вместо *. https?://([a-z0-9] [.])?тестовый домен[.]com Спасибо.