1

私の PHP プログラムでは、実行時にのみ定義される正規表現がいくつかあります。それらの一致がキャッチしない他のすべてに一致する正規表現を作成するにはどうすればよいですか?

var_dump(preg_match("#^Bob$#", 'Bob'));
var_dump(preg_match("#^Alice$#", 'Alice'));

^Bob$必要な正規表現は、 and以外のすべてです^Alice$

使ってみた

var_dump(preg_match("#(?(?=(^Bob$|^Alice$))|^$|.*)#", 'John'));

しかし、 preg_match 関数は私に与えましたWarning: preg_match(): Compilation failed: conditional group contains more than two branches at offset 27

4

1 に答える 1

2

?間違った構文で条件 ( で始まる最初のグループ) を使用しました。これは警告です。

しかし、条件付き正規表現は必要ないと思います。試してみてください

 var_dump(preg_match("#^(?!(Bob|Alice)$).*#", 'John'));

アンカー^を式の最初の$オルタネーションの外に移動したので、両方のオルタナティブに有効です。

この正規表現は、"Bob" や "Alice" だけでなく、すべての文字列 (改行文字を除く) に一致します。

于 2013-01-30T08:19:11.523 に答える