正则表达式中的负向前瞻和通配符。

3

我不确定标题是否合适,但我不知道怎么表达。 我有一些字符串(文件名),看起来像这样:

/aa/john/doe/xx/yy/xxTRUEyy.jar
/bb/ee/john/doe/xx/yy/aaTRUE.jar
/cc/john/doe/xx/yy/aaFALSE.jar
/dd/john/deere/xx/yy/aaTRUE.jar

我需要一个正则表达式,不匹配字符串中包含/john/doe/且有TRUE作为名称一部分的JAR文件。在上面的例子中,应该只匹配字符串3和4。

为什么需要负向前瞻 - Willem Van Onsem
CommuSoft,感谢您的回复 - 但是我表述问题有误 - 我已经进行了编辑 - 对此我感到抱歉。 - user1862830
按照您的措辞,您的标准只会匹配最后一个字符串,而@Willem Van Onsem正确地进行了匹配。您应该编辑您的问题,删除虚假的第三个字符串匹配声明,或者改进您的规范以匹配您想要实现的内容。 - rivy
1个回答

4
您可以使用(?!)组来执行负向先行断言:
^(?!.*\/john\/doe\/).*TRUE[^\/]*\.jar$

应该足够了。 regex101演示


你说得对 - 我不需要向前看 - 但那是因为我误解了问题,现在已经进行了编辑。非常抱歉。 - user1862830
@user1862830:修改过了,更好了吗? - Willem Van Onsem
1
不错!这个标题问题的技巧是将通配符移动到负向先行断言内部。因此,我们会使用/(?!.*joe)/而不是/.*(?!joe)/ - Ricardo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接