2017-09-18 159 views
-1

如果没有超过一个'是',我只想返回一个匹配。正则表达式:只匹配单词出现一次

实施例:
这将是一个匹配:
事件1(是)
事件2(否)
事件3(否)

这不会是一个匹配:
事件1(是)
事件2(否)
活动3(是)

我已经尝试了很多不同的组合,根据我找到的其他答案。

^([^Y]|Y[^e]|Ye[^s])*Yes([^Y]|Y[^e]|Ye[^s])*$ 

假设你使用Perl或PCRE正则表达式:

+0

[“要检查文本是否只包含一个子字符串一次,您需要检查匹配不构成的所有字符,然后匹配,并使用否定前瞻来检查是否没有进一步的,并消耗所有字符。此外,行/字符串边界^/$是必须的“](https://stackoverflow.com/questions/30144801/regular-expression-that-match-a-text-if-it-contains-a-字符串只)一次)这里是一个解决方案的链接 –

+0

@JLL请提供你已经尝试过的(一些代码片段)和它失败的地方(一些错误或意外的输出)。 –

+0

有更干净的方法可以做到这一点。找出所有出现的单词“是”(如果你不需要一个单词匹配,你甚至可以使用你的语言提供的非正则表达式方法),然后检查计数。如果计数为1,则该字符串有效。 –

回答

-1

你可以匹配一个是。

+0

谢谢,NetMage! – JLL