我正在使用re2/J来提取URL,无论它们是否以正则表达式开始。 我使用的是相当简单的模式,如何使用正则表达式将url作为单词匹配而不使用标准单词边界?
(?i)((https?://)?(([a-z0-9\\-]+[.])*([a-z0-9\\-]+[.][a-z]+/?)([^\\s()<>]*)))
但是我加入\ b在开始和结尾是\ B不是帮助我很多。它仍然是匹配电子邮件的一部分的网址。
example.com from email @example.com也会被匹配。我正在努力避免的事情。 @被视为非单词字符,因此\ b将其视为单词边界。
有没有一个很好的替代解决方案来解决这个问题?
编辑:
请注意,我试图替换HTML锚标记网址,所以我没有真正寻找匹配。我必须指定一个模式和一个替换捕获的组。
在re2中不支持lookarounds,唯一的解决方法是* match *你不需要和* capture *你需要的东西。见['(?i)\ S + @ \ S +。\ S + |((?:https:://)?(?:[a-z0-9-] + [。])* [a-z0-9 - ] + [] [AZ] +/[^ \ S()<>] *)'](https://regex101.com/r/5QpPux/1)。?。 –
@WiktorStribiżew您能否详细说明捕捉。检查我的编辑。 –
我不知道're2'是否允许在正则表达式替换方法中使用回调方法。普通的Java正则表达式可以用'Matcher#appendReplacement'来实现。 –