我有一个字符串列表,我需要使用正则表达式进行过滤。一些字符串可能包含'(random_chars)。(random_chars)。(random_chars)。(random_chars)...'等形式的URLS。
我正在尝试创建一个可以找到这样的URL但正在忽略URLS的正则表达式,其中第一组(random_chars)与'java'不匹配。
例如下面的字符串:
我目前的正则表达式将匹配以下内容:
这是我目前的正则表达式,我试图使用负向前瞻:
(?!java)(?:(?:\w+\.)+[\w]+)
我的正则表达式错过了什么?
你得到那些匹配,因为负面前瞻(?!java)
断言直接在右边的东西不是java。
当位置在java.lang.Assertion
之前时,这是错误的,因此不匹配。
但后来转移到j
,那么断言是正确的,因为在右边现在是ava.lang.Assertion
所以将匹配。
一种选择可能是使用(*SKIP)(*FAIL)
匹配您不想保留的内容。然后匹配你想要保留的内容。
\bjava(?:\.\w+)+(*SKIP)(*FAIL)|(?<!/)\b\w+(?:\.\w+)+
这将匹配
\bjava(?:\.\w+)+(*SKIP)(*FAIL)
模式匹配你不想保留的|
或(?<!/)
负面观察,断言左边的东西不是正斜线\b\w+(?:\.\w+)+
要从字边界开始匹配的模式