我有一个需要使用正则表达式过滤的字符串列表。某些字符串可能包含形式为((random_chars)。(random_chars)。(random_chars)。(random_chars ......)等形式的URL。
我正在尝试创建一个可找到此类URL的正则表达式,但忽略第一组(random_chars)与“ java”不匹配的URL。
例如下面的字符串:
“测试字符串(test.url.com)abcdef java.lang.Assertion uvwxyz www.google.com abcdef”
我希望它与test.url.com和www.google.com匹配,但与java.lang.Assertion不匹配
“另一个测试字符串/abc/xyz/lib/def/GH.tr测试200。”
我不希望它匹配GH.tr
我当前的正则表达式将符合以下条件:
这是我当前的正则表达式,并且我尝试使用否定的前瞻:
(?!java)(?:(?:\w+\.)+[\w]+)
我的正则表达式错过了什么?
答案 0 :(得分:0)
之所以能够获得这些匹配项,是因为负前行(?!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+)+
您要匹配的模式(从单词边界开始)