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.