1

私はこの正規表現(ライブ)を持っています:

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

そして、これらの3つの文:

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

私の正規表現は 1 と 3 に一致しますが、1 だけに一致するはずです。

私の基本的なルールは、単語の 1when|how|whereつが単語の 1 つよりも前に現れてはならないということARE|WANNA|DOです。

何か案は?

4

2 に答える 2

2

以下が機能するはずです。

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

like の繰り返しグループ内に否定先読みを((?!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 に答える