Regex: получить из URL все, что находится между www. и .com

0

Я пытаюсь использовать PHP preg_match() для извлечения всего между www. и .com URL.

например:

www.example.com вернет example

www.example-website.com вернет example-website

Мне повезло, что URL-адреса, с которыми я работаю, всегда запускают www. и всегда заканчивается .com, поэтому ему не нужно быть особенно сложным, учитывая множество случаев использования.

Однако мои знания Regex минимальны.

Моя попытка:

preg_match("/.([^.]*)./", $string, $matches);

Поскольку согласно RegExr второе совпадение ($matches[1] matches $matches[1]?) Должно содержать то, что мне нужно, но оно, похоже, не работает.

Благодарю.

Теги:

2 ответа

0
Лучший ответ

Вам нужно избегать точек в регулярном выражении.

preg_match("/www\.([^.]*)\.com/", $string, $matches);

. в регулярном выражении может соответствовать (почти) любому персонажу,

в то время как

\. соответствует только литералу . точка внутри URL.

www и com можно использовать для разграничения строки в URL-адресе, что дает дополнительную безопасность.

Пример: http://regex101.com/r/aA5eC5/2

Первая группа захвата (\1) будет содержать

example
example-website

РЕДАКТИРОВАТЬ

Если регулярное выражение соответствует строкам с другим . в нем что-то вроде www.example.somesite.com, тогда регулярное выражение может быть изменено как

preg_match("/www\.(.+)\.com/", $string, $matches);
  • 0
    Не будет сопоставлять URL с несколькими поддоменами, как www.example.somesite.com
  • 0
    @ Mateon1 это не так, потому что OP хочет что-то очень минимальное, как в приведенном примере
Показать ещё 1 комментарий
1
(?<=www\.)(.+?)(?=\.com)

Попробуйте это. Захватите захват. Смотрите демоверсию.

http://regex101.com/r/iZ9sO5/10

  • 0
    Это соответствует www..com , попробуйте (.+?)
  • 0
    @Flosculus: проверка формата URL здесь не является целью.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню