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

Java 用于匹配未后跟特定模式的数字的正则表达式,java,regex,regex-lookarounds,regex-negation,regex-greedy,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. regex I构建使用负前瞻,但在所有行上测试它都匹配: \d+(?!( ?red| ?green)

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

123 warehouse
124 token warehouse.
153token token abc123; etc. - warehouse 
223abdc token abc green warehouse 
但不是这几行:

53red warehouse.
323 green token token etc warehouse. 
regex I构建使用负前瞻,但在所有行上测试它都匹配:

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

错误是什么?应该如何修改?如果重要的话,正则表达式应该在Java下编译(在转义必要的字符之后)。

使用
123redwarehouse.

您的正则表达式匹配1个或多个数字
12
,然后不是红色或绿色
3red
然后是任何字符
a空格
仓库

在第一个数字后添加负前瞻:

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

123红色仓库。

您的正则表达式匹配1个或多个数字
12
,然后不是红色或绿色
3red
然后是任何字符
a空格
仓库

在第一个数字后添加负前瞻:

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

如果您使用一个用于防止回溯的

\d++
而不是
\d++


这是pcre,但Java正则表达式也应该支持它们。

如果您使用用于防止回溯的

\d++
而不是
\d++


哪个是pcre,但Java正则表达式也应该支持这些。

您能澄清一下您的需求吗?你想避免的第二批呢?我所能猜到的是,您希望避免在“仓库”之前出现某些单词(“红色”、“绿色”)的行吗?这些是唯一的三个词,还是更多呢?我想在数字之后直接避免几个单词(比如红色或绿色)。在后面的表达式中,它们应该被允许,请参见第4个示例。还有几个固定的词,都可以用分隔符(?红|绿|蓝|黄)来表示。你能澄清一下你的要求吗?你想避免的第二批呢?我所能猜到的是,您希望避免在“仓库”之前出现某些单词(“红色”、“绿色”)的行吗?这些是唯一的三个词,还是更多呢?我想在数字之后直接避免几个单词(比如红色或绿色)。在后面的表达式中,它们应该被允许,请参见第4个示例。还有几个固定词,都可以用析取来表达(?红|绿|蓝|黄)为什么不使用所有格量词呢?在这种情况下,没有回溯,因此获得结果的步骤更少。为什么不使用所有格量词呢?在这种情况下,将没有回溯,因此获得结果的步骤更少。这是一个很好的解决方案。虽然你可以改善结果+1这是一个很好的解决方案。虽然你可以改善结果+1.