如何使用正则表达式将字符串与一个模式匹配而不是另一个模式?

时间:2011-09-14 16:02:19

标签: regex string

我需要确定字符串是否匹配一个子字符串,而不是另一个子字符串。例如,给定子串" john"和" mary",其中" john"必须在场并且" mary"一定不能:

"我的名字是约翰" - >匹配

"我的名字是玛丽" - >没有比赛

"他们的名字是约翰和玛丽" - >没有比赛

请注意,这两个字符串不可互换," john"永远是一个匹配的," mary"必须永远不会匹配,所以它不是简单的异或操作

2 个答案:

答案 0 :(得分:3)

这是你的正则表达式:

^(?!mary)(.(?!mary))*john(?!mary)(.(?!mary))*$

好的,我会解释一下,因为你的问题是“如何”。 :) ^标志着开始 (?!mary)是一个负面的预测。如果当前位置没有“mary”,则匹配。之后,任何未跟随“mary”的角色都会被吃掉,直到达到“john”。然后整个玛丽检查再次完成,直到结束,标记为美元符号。

答案 1 :(得分:2)

为什么不将这个问题分成两部分?

  • 检查字符串中是否出现john。如果它存在,继续。否则返回false
  • 现在检查字符串中是否出现mary。如果存在,请返回false,否则true

现在将两个测试合并为一个方法。