正则表达式用于匹配没有特定模式的数字

RegEx for matching digits not followed by specific pattern

我正在尝试构建一个正则表达式来匹配以下行样式:

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

123red warehouse.

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

在第一位数字之后添加一个否定前瞻:

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

DEMO

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

\d++ 而不是 \d+

Here is a demo at regex101 这是 pcre 但 Java 正则表达式也应该支持这些。