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

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


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


侃侃尔雅
浏览 68回答 2
2回答

元芳怎么了

如果您使用所有格量词来防止回溯,则您的模式有效:\d++代替\d+这是 regex101 上的演示,它是 pcre,但 Java 正则表达式也应该支持这些演示。

慕码人2483693

和123red warehouse.您的正则表达式匹配 1 个或多个数字12,然后不是红色或绿色,然后是3red任何字符。a spacewarehouse在第一位数字之后添加一个负前瞻:\d+(?!\d)(?! ?(?:red|green)).*(\bwarehouse\b)演示
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java