特定の位置に特定の文字が含まれていない場合にのみ文字列と一致するように、正規表現で NOT 操作と同等のものを使用することは可能ですか?
メタ文字で ^ は「クラスを否定する」ことを意味することがありますが、その使用例を見つけるのに苦労しています。そして、その特定の文字は文字列の先頭であいまいなので、少し混乱します。
特定の位置に特定の文字が含まれていない場合にのみ文字列と一致するように、正規表現で NOT 操作と同等のものを使用することは可能ですか?
メタ文字で ^ は「クラスを否定する」ことを意味することがありますが、その使用例を見つけるのに苦労しています。そして、その特定の文字は文字列の先頭であいまいなので、少し混乱します。
はい、それらは先読みネガティブアサーションと呼ばれます。some_re(?!not_on_my_watch)
あなたは下記にもご興味がおありかもしれません:
(?<!not_even_before_my_watch)
[^\d\sa-z]
関連するpcre/php ドキュメントで assertionsを確認することもできます。
他に興味深いものがあるかどうかを確認するため。
注意してください:否定的なアサーションは 、あなたが考えていなかった文字列の位置で、あなたの意志に反して一致する可能性があります。次のことに備えてください。
.*?
'foo[^b]ar'
but で始まりbutfoo
で終わるものすべてに一致します。したがって、クラスも否定されます。これは、文字のリストでもあります (範囲の使用は、b、c、d をスキップするように受け入れられます)。ar
foobar
[^b]
[^b-d]
特定の位置 (位置 5などx
) にない特定の文字 (たとえば、) の正規表現は次のとおりです。
^.{4}[^x]
どこx
にもない特定の文字 (たとえば、) の正規表現は次のとおりです。
^(?!.*x)