Я использую re2/J для извлечения URL-адресов независимо от того, начинаются ли они с регулярного выражения или нет. Я использую довольно простой шаблон,
(?i)((https?://)?(([a-z0-9\\-]+[.])*([a-z0-9\\-]+[.][a-z]+/?)([^\\s()<>]*)))
Однако добавление \b в начале и в конце \b мне мало помогает. он по-прежнему соответствует URL-адресам, которые являются частью электронного письма.
example.com с email@example.com также будет соответствовать. Что-то, чего я пытаюсь избежать. @ считается символом, не являющимся словом, и, следовательно, \b рассматривает его как границу слова.
есть ли хорошее альтернативное решение этой проблемы?
ИЗМЕНИТЬ:
Обратите внимание, что я пытаюсь заменить URL-адреса тегами привязки html, поэтому на самом деле я не ищу совпадений. Я должен указать шаблон и замену захваченными группами.
(?i)\S+@\S+.\S+|((?:https?://)?(?:[a-z0-9-]+[.])*[a-z0-9-]+[.][a-z]+/?[^\s()<>]*)
. - person Wiktor Stribiżew   schedule 08.12.2016re2
использовать метод обратного вызова внутри метода замены регулярного выражения. Обычное регулярное выражение Java может сделать это с помощьюMatcher#appendReplacement
. - person Wiktor Stribiżew   schedule 08.12.2016Matcher#appendReplacement
а> - person Amogh Talpallikar   schedule 08.12.2016