#php #regex #pattern-matching
#php #регулярное выражение #сопоставление с шаблоном
Вопрос:
Мне нужно сопоставить «базовый» URL, я имею в виду:
Not match --> http://google.com
Not match --> http://www.google.com
Not match --> www.google.com
Match! --> google.com
Я пытался использовать отрицательный просмотр, чтобы убедиться, что нет http: // или www, но, похоже, это работает некорректно.
Комментарии:
1. Это обязательно должно быть в одном регулярном выражении? Какое регулярное выражение вы пробовали?
2. Возможно, вы захотите взглянуть на
parse_url
. Решение regex для этого может стать очень запутанным.3.
google.com
поскольку URL означает нечто совершенно иное, чемhttp://google.com
. «базовый домен» может быть лучшим термином, чем совершенно неправильный «базовый URL».
Ответ №1:
Это должно быть только с одним регулярным выражением?
У вас может быть первое регулярное выражение, которое будет соответствовать всем найденным URL. Что-то вроде этого:
b. ?.w{2,4}b
А затем отфильтруйте все совпадения и сохраните те, которые не соответствуют следующему:
^(http://|www)
хотя, честно говоря, я бы не стал использовать Regex, если только это не является строго необходимым для этого.
Примечание:
Вы всегда можете найти лучшее регулярное выражение для соответствия URL. Дело в том, что они могут начинаться не с http://
или www
, поэтому мы не можем так сильно ограничивать регулярное выражение. Будьте готовы к другим совпадениям, которые вообще не являются URL, например:
yesterday.but
в I was there yesterday.but no one saw me
Комментарии:
1. Согласен, я уже думал о том, что они не начинаются с http: // или www, и думал, что что-нибудь придумаю, но вы правы. Поскольку это простое «поле ввода URL», я предполагаю, что каждый URL должен быть reg ex, а не просматриваться вручную. Спасибо
2. Если это будет текстовое поле только для URL, вы можете выполнить некоторые другие проверки (посмотреть, содержат ли пробелы и т.д.) И заменить
b
на^
и$
. Вы можете прочитать рекомендации, какие символы принимаются в URL-адресах.