我需要确定字符串是否与一个子字符串匹配,而不是与另一个子字符串匹配。例如,给定子字符串"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
现在将两个测试合并为一个方法