2

У меня есть это регулярное выражение:

[AZ]+[:.].*?\s

Я запускаю его на следующем тексте:

regexbuddy.com
www.regexbuddy.com
http://regexbuddy.com cvc
http://www.regexbuddy.com cvcv
http://www.regexbuddy.com/ g
http://www.regexbuddy.com/index.html f
http://www.regexbuddy.com/index.html?source=library f
You can download RegexBu    ddy at http://www.regexbuddy.com/download.html. f
"www.domain.com/quoted URL with spaces"
http://10.2.2.1.2/ttxx/txt/gg v
support@regexbuddy.com

Мне нужно соответствовать следующее - только жирный текст:

Как я могу это сделать?

ОБНОВИТЬ

@slhck ваше исправленное регулярное выражение соответствует почти всему, кроме случаев, когда URL начинается с www. например - "www.domain.com/ цитируемый URL с пробелами"

Я внес некоторые изменения в регулярное выражение, чтобы соответствовать ведущему www. Это выглядит как

(HTTPS)://. (?=\s)|(WWW)..(?=\ S)

Можете ли вы, пожалуйста, обзор? и предложить, если существуют лучшие способы сопоставления.

1 ответ1

6

Если вы не хотите включать конечные пробелы в совпадении, используйте отрицательный прогноз:

[a-z]+[:.].*?(?=\s)

В вашем примере это будет соответствовать:

regexbuddy.com
www.regexbuddy.com
http://regexbuddy.com
http://www.regexbuddy.com
http://www.regexbuddy.com/
http://www.regexbuddy.com/index.html
http://www.regexbuddy.com/index.html?source=library
http://www.regexbuddy.com/download.html.
www.domain.com/quoted
http://10.2.2.1.2/ttxx/txt/gg

Для дальнейшего сопоставления только http или https и необязательный www используйте что-то вроде:

(https?):\/\/(www\.)?[a-z0-9\.:].*?(?=\s)

Вот регулярное выражение Джона Грубера для проверки того, что выглядит как URL, что, по-видимому, в вашем случае работает очень хорошо:

(?i)\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))

Но, честно говоря, все эти подходы рано или поздно приведут вас к ложным совпадениям. Если вам нужно регулярное выражение для разбора URL-адресов, см. Вопрос переполнения стека. Какое регулярное выражение лучше всего проверить, является ли строка допустимым URL-адресом?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .