1

我有这个正则表达式(现场)

^((?!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

有任何想法吗?

4

2 回答 2

2

以下应该有效:

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

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

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

于 2013-09-16T16:55:54.493 回答
1

尝试改用这个:

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

该组将在匹配之前“检查”每个.点,并确保每个点都没有when|how|where前面。

于 2013-09-16T16:55:29.210 回答