4

我是 Java 中概念正则表达式的新手。如何定义一个匹配短语“money”、“more money”但不匹配短语“no money”的正则表达式?

4

3 回答 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 回答