我正在尝试构建正则表达式以匹配以下线条样式:
123 warehouse
124 token warehouse.
153token token abc123; etc. - warehouse
223abdc token abc green warehouse
但不是这些行:
53red warehouse.
323 green token token etc warehouse.
我构建的正则表达式使用负前瞻,但在https://regex101.com/上进行测试会匹配所有行:
\d+(?!( ?red| ?green)).*(\bwarehouse\b)
什么是错误,应该如何纠正?如果有关系,则该正则表达式应在Java下编译(转义必要的字符之后)。
答案 0 :(得分:2)
使用123red warehouse.
您的正则表达式匹配1个或多个数字12
,然后匹配红色或绿色的3red
,然后匹配a space
的任何字符warehouse
。
在前几个数字后添加负前瞻:
\d+(?!\d)(?! ?(?:red|green)).*(\bwarehouse\b)
答案 1 :(得分:2)
如果您使用possessive quantifier来防止回溯,则您的模式有效:
\d++
而不是\d+
Here is a demo at regex101是pcre,但Java regex也应该支持这些。