如何使用正则表达式匹配具有一种模式但不具有另一种模式的字符串



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

"My name is john" ->匹配

"My name is mary" -> no match

"他们的名字是john和mary" ->不匹配

注意这两个字符串是不可互换的,"john"总是要匹配的,而"mary"绝不能匹配,所以这不是一个简单的异或操作

这是你的正则表达式:

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

好吧,既然你的问题是"如何",我就解释一下。:)^标志着开始。
(?!mary)是负正向的。如果当前位置没有"mary",则匹配。在那之后,任何后面没有"mary"的字符都会被吃掉,直到吃到"john"为止。然后再次执行整个检查,直到以美元符号标记的末尾。

你为什么不把这个问题分成两部分呢?

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

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

相关内容

最新更新