如果单词没有出现在其他单词之前,则正则表达式匹配

时间:2013-09-16 16:52:59

标签: ruby regex regex-lookarounds

我有Regex (Live)

^((?!when|how|where).*?(ARE|WANNA|DO).*\?)$

这三句话:

Hey are we out after the rain?
Where are we meeting?
Dan where are we gonna meet?

我的正则表达式匹配1和3,但只能匹配1。

我的基本规则是其中一个单词when|how|where无法出现在其中一个单词ARE|WANNA|DO之前。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

以下内容应该有效:

^((?!when|how|where).)*?(ARE|WANNA|DO).*\?$

将负前瞻放在像((?!foo).)*这样的重复组中会导致在每个字符匹配之前检查前瞻,因此这将匹配任何数字的任何字符,但如果遇到foo则停止。 / p>

示例:http://rubular.com/r/0cw8eaFMXB

答案 1 :(得分:1)

请尝试使用此代码:

^((?:(?!when|how|where).)*?(ARE|WANNA|DO).*\?)$
  ^^^                   ^

在匹配之前,此论坛会“检查”每个.,并确保每个点前面都没有when|how|where