我是 Java 中概念正则表达式的新手。如何定义一个匹配短语“money”、“more money”但不匹配短语“no money”的正则表达式?
问问题
217 次
3 回答
3
会是这样的
(more )?money
如果您需要更多单词:
(more |less )?money
于 2013-06-14T09:11:10.203 回答
1
要匹配前面包含“money”而没有“no”的所有字符串,请使用否定的lookbehind:
(?<!no )money
这里有些例子。请注意,我.*
在正则表达式之前和之后添加以匹配字符串中的任何位置:
re = ".*(?<!no )money.*"
"blah blah blah money blah blah blah".matches(re)
=> true
"blah blah blah more money blah blah blah".matches(re)
=> true
"blah blah blah no money blah blah blah".matches(re)
=> false
于 2013-06-14T09:27:18.367 回答
1
你可以用正则表达式来做到这一点......我认为"(?<!no)( more)? money"
应该为你的例子做这个伎俩。
但这不是分析文本的好方法:
它可以给出误报;例如
"domino money" -- matches
和假阴性;例如
"more money" -- doesn't match because we didn't allow for multiple spaces.
随着您正在测试的语言变得越来越丰富,您的正则表达式最终会出现组合爆炸。这使您的正则表达式难以阅读/维护,并可能导致性能问题。
于 2013-06-14T09:27:19.743 回答