Проблема в том, что вы сопоставляете все от двух слешей до .com
. Если есть www.
, вы тоже соответствуете этому в своей группе захвата.
Решение состоит в том, чтобы сопоставить www.
опционально перед вашей группой захвата, как это
^http://(?:www\.)?([^/]+)\.com
^^^^^^^^^^ ^^
(?:www\.)?
Это группа без захвата, т. Е. Содержимое не сохраняется в результате. ?
в конце делает его необязательным.
\.
будет соответствовать литералу ".". .
является специальным символом в регулярном выражении и означает «Любой символ».
Смотрите здесь онлайн на Regexr . Когда вы наводите указатель мыши на строки, вы увидите содержимое группы захвата.
Относительно ваших попыток с [http://]
и так далее. Когда вы используете квадратные скобки, вы создаете класс символов, что означает совпадение с одним из символов внутри скобок. Если вы хотите сгруппировать символы, используйте захватывающую ()
или не захватывающую группу (?:)
.