0

/^(.+?) (is|was) an? (.+?)$/PHPのpreg_match関数の現在の正規表現です。

"what is a dog"しかし、文: orと一致させたくありません"who is a dog"。したがって、「何」と「誰」という単語が最初のグループに一致しないように指定する必要があります。

どうすればいいですか?

ありがとう。

編集:明確にするために、"Buddy is an animal"and"jsbvsjvdhbjsbjhv is a dog"などの文に一致させたい.

4

2 に答える 2

6

(is|was)グループの直前に、否定の後読みを使用できます。

/^(.+?)(?<!what|who) (is|was) an? (.+)$/

最後のサブパターンから貪欲でない量指定子を削除したことに注意してください。文字列の最後までできるだけ一致させたいので、できるだけ一致しないように指示するのは効率的ではありません。

于 2012-07-03T16:02:36.960 に答える
-1
/^((([^w]|w[^h]|wh[^ao]|wha[^t]|what.|who.).* is)|(.+?) was) an? (.+?)$/

:)

訂正、質問を誤解しました: ( what was a.*andwho was a.*も除外する必要があります)。さらに簡単に:

/^([^w]|w[^h]|wh[^ao]|wha[^t]|what.|who.).* (is|was) an? (.+?)$/
于 2012-07-03T16:13:07.543 に答える