正则表达式用于匹配数字,后跟特定的模式

时间:2019-05-31 17:02:58

标签: java regex regex-lookarounds regex-negation regex-greedy

我正在尝试构建正则表达式以匹配以下线条样式:

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下编译(转义必要的字符之后)。

2 个答案:

答案 0 :(得分:2)

使用123red warehouse.

您的正则表达式匹配1个或多个数字12,然后匹配红色或绿色的3red,然后匹配a space的任何字符warehouse

在前几个数字后添加负前瞻:

\d+(?!\d)(?! ?(?:red|green)).*(\bwarehouse\b)

DEMO

答案 1 :(得分:2)

如果您使用possessive quantifier来防止回溯,则您的模式有效:

\d++而不是\d+

Here is a demo at regex101是pcre,但Java regex也应该支持这些。