「この文字と一致しない」という意味の正規表現演算子はどれですか?


回答:


92

否定文字クラスを使用して、特定の文字を除外できます。たとえば[^abcde]、a、b、c、d、e文字以外のものと一致します。

すべての文字を文字どおりに指定する代わりに、文字クラス内で省略形を使用できます。[\w](小文字)は任意の「単語文字」(文字、数字、アンダースコア)に[\W]一致し、(大文字)は単語文字以外に一致します。同様に、[\d]0〜9桁に一致し、0〜9桁以外に[\D]一致します。

PHPを使用している場合は、正規表現の文字クラスのドキュメントを参照してください


82

「一致しない」と言うには、文字範囲とゼロ幅の負の先読み/後読みの2つの方法があります。

前者は:一致していないabcまたは0[^a-c0]

後者:以外の任意の3文字の文字列と一致fooしてbar

(?!foo|bar).{3}

または

.{3}(?<!foo|bar)

また、あなたのための修正:*?そして+実際には何にも一致しません。これらは繰り返し演算子であり、常に一致する演算子に従います。このように、a+手段が1に一致する以上のa[a-c0]+手段は、の一つ以上に一致するabcまたは0、しばらくは[^a-c0]+なかったものの一つ以上に一致しabcまたは0


^((?!foo).)+$fooという含まない任意の行と一致regex101.com/r/z6a65l/4
レヴィBaguley

49

[^][]内)は正規表現の否定^ですが、は「文字列の始まり」です

[^a-z] 任意の1文字と一致していないが「」に「Z」から

^[a-z] 文字列が「a」から「z」で始まることを意味します

参照


9

^ 文字範囲の先頭、または負の先読み/後読みアサーションで使用されます。

>>> re.match('[^f]', 'foo')
>>> re.match('[^f]', 'bar')
<_sre.SRE_Match object at 0x7f8b102ad6b0>
>>> re.match('(?!foo)...', 'foo')
>>> re.match('(?!foo)...', 'bar')
<_sre.SRE_Match object at 0x7f8b0fe70780>

あなたが使用する必要があります?!、最後の2例にまたはあなただけ使用することができ!、それ自体で??そこには何がありますか?
2011年

Pythonは、?それが拡張機能であることを伝えるためにを必要とします。他の正規表現エンジンには独自のルールがある場合があります。
Ignacio Vazquez-Abrams

@クリック:それはかなり標準的です。regular-expressions.info/refadv.html、またほとんどの正規表現エンジンのマニュアルは同じことを言っています。
アマダン2011年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.