8

特定の位置に特定の文字が含まれていない場合にのみ文字列と一致するように、正規表現で NOT 操作と同等のものを使用することは可能ですか?

メタ文字で ^ は「クラスを否定する」ことを意味することがありますが、その使用例を見つけるのに苦労しています。そして、その特定の文字は文字列の先頭であいまいなので、少し混乱します。

4

3 に答える 3

8

はい、それらは先読みネガティブアサーションと呼ばれます。some_re(?!not_on_my_watch)

あなたは下記にもご興味がおありかもしれません:

  • 否定的なアサーションを後読みし、(?<!not_even_before_my_watch)
  • および負の文字クラス[^\d\sa-z]

関連するpcre/php ドキュメントで assertionsを確認することもできます。
他に興味深いものがあるかどうかを確認するため。

注意してください:否定的なアサーション 、あなたが考えていなかった文字列の位置で、あなたの意志に反して一致する可能性があります。次のことに備えてください。

于 2012-12-17T05:45:26.213 に答える
6
 'foo[^b]ar'

but で始まりbutfooで終わるものすべてに一致します。したがって、クラスも否定されます。これは、文字のリストでもあります (範囲の使用は、b、c、d をスキップするように受け入れられます)。arfoobar[^b][^b-d]

于 2012-12-17T05:40:04.663 に答える
4

特定の位置 (位置 5などx) にない特定の文字 (たとえば、) の正規表現は次のとおりです。

^.{4}[^x]

どこxにもない特定の文字 (たとえば、) の正規表現は次のとおりです。

^(?!.*x)
于 2012-12-17T05:38:19.380 に答える