列ではない、またはエスケープされた列である一連の文字を認識する単純な正規表現を作成しようとしています。すなわち:
foo:bar //Does not match
しかし
foo\:bar //Does match
正規言語に関する私の知識では、そのような言語は正規表現で記述できます
/([^:]|\\[:])*/
すばらしいツールRegexperで、この式のグラフィカルな表現を見ることができます。
php の( PCREpreg_match
エンジンに基づく) を使用すると、このような式は "foo\:bar" と一致しません。
ただし、クラスを単一の文字に置き換えると、次のようになります。
/([^:]|\\:)*/
表現が一致します。
これについて説明はありますか?これは、文字クラスに対する PCRE エンジンの一種の制限ですか?
PS: AS3 Regexp エンジンに基づくRegExrで最初の式をテストすると、代替順序を変更しながら一致が得られません。
/(\\[:]|[^:])*/
一致しますが、同じ式は PCRE では一致しません。