正则表达式为:
^.+(?!\_\d{3}$)
必须匹配:abc_001_952010923
不得匹配:abc_001_952010923_002
我想使用负数前瞻,但似乎不起作用(这两种情况都匹配)。
https://regex101.com/r/0jt4ut/1
您的帮助将不胜感激。
答案 0 :(得分:4)
我将用这种方式来表达您的正则表达式,在模式的开始处使用负的超前断言:
^(?!.*_\d{3}$).*$
这似乎有效in your updated demo。
在当前模式中,负前行位置的问题是,可以通过使.+
足够贪心来使两个输入字符串匹配。通过一开始就断言,可以确保我们剔除您不需要的输入。
要更好地了解abc_001_952010923_002
实际如何传递当前的正则表达式,请考虑以下问题:
abc_001_952010923_002
| matched by .+ | (everything matched except last 2)
|| <-- (?!_\d{3}$) lookahead fires here
也就是说,.+
可以消耗整个模式直到最终数字(2
),然后可以使否定的超前通过。
答案 1 :(得分:0)
答案 2 :(得分:0)