Я пытаюсь использовать 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]
?) Должно содержать то, что мне нужно, но оно, похоже, не работает.
Благодарю.
Вам нужно избегать точек в регулярном выражении.
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);
(?<=www\.)(.+?)(?=\.com)
Попробуйте это. Захватите захват. Смотрите демоверсию.
www..com
, попробуйте (.+?)
www.example.somesite.com