2016-05-25 3 views
5

私は正規表現のゴルフをしていて、一致するはずの単語と、一致するはずの単語をすべて含む正規表現を特定しました。アイデアは、私は単純に正規表現を無効にしてから反対のものを得ることができるということでした(私が一致すると思われるすべての単語と他のもののどれも含む)。regex文を否定するにはどうすればよいですか?

私は(\w)(\w)\2\1を思い付いた正規表現は、パターンabbaを使って何が一致するので、私は負の前後参照(?!(\w)(\w)\2\1)を使用していないパターンabbaのものを私に一致するだろうと思ったが、今それだけですべてを強調し、あなたがしたい場合は、ここにURLですそれを試してみる:それは私には思えるhttp://regex.alf.nu/4

+0

これはオプションですが、 'grep -v'を使用してください。 –

+2

' ^(?!w *(\ w)(\ w)\ 2 \ 1)。 –

+0

@InnocentBystander Webベースのインターフェースなので、grepは許可されていません。 – sreya

答えて

3

あなたはそれらの繰り返しシンボルを含む一致する文字列を除外したいです。したがって、繰り返しをテストする文字の前に\w*(0文字以上の文字)を追加する必要があります。

使用

^(?!\w*(\w)(\w)\2\1).* 
    ^^^  

regex demoを参照してください。

したがって、(?!\w*(\w)(\w)\2\1)ルックアヘッドは、文字列の先頭に次のチェックを行います.0文字以上の英数字/アンダースコア文字の後に1文字と2文字が続き、2文字目に続いてキャプチャされた最初の文字マッチが返されます(マッチは失敗します)。

テキストを一致させるつもりがない場合(一致するかどうかを確認する場合など)は、.*部分は必要ありません。ただし、一致する空の文字列を除外する場合は、.*+)の代わりに.+を使用してください。と一致するのは、数値化されたサブパターンです。

+0

ああ空の文字列を除外するためにアンカーが必要ですか? – sreya

+0

いいえ、文字列が空でないことを確認するには、最後に '。+'を使用できます。空のマッチで期待される振る舞いが正確ではなかっただけです。 –

関連する問題