web-dev-qa-db-ja.com

キーワードのセットを除外する正規表現

「boon.ini」や「http」などの単語に遭遇すると失敗する式が必要です。目標は、この表現を使用して、任意のキーワードセットを作成できるようにすることです。

46
kae
^(?:(?!boon\.ini|http).)*$\r?\n?

RegexBuddy のライブラリから取得)は、boon.iniおよび/またはhttpを含まない行に一致します。それはあなたが望んだことですか?

47
Tim Pietzcker

使用できる代替表現:

^(?!.*IgnoreMe).*$

^ =行の始まりを示します
$ =行の終わりを示します
(?! Expression) =幅0の先読み式での負の一致を示します

^が必要です。そうでない場合は、評価時にネガティブルックアヘッドが「IgnoreMe」テキスト内またはそれ以降のどこかから開始され、必要のない場所で一致する可能性があります。

例えば正規表現を使用する場合:

(?!.*IgnoreMe).*$

「Hello IgnoreMe Please」と入力すると、「gnoreMe Please」のような結果になります。否定的な先読みでは、「I」の後に完全な文字列「IgnoreMe」がないことがわかります。

15
Tim

式内の結果を否定するのではなく、コードでそれを行う必要があります。そうすれば、式は非常に単純になります。

\b(boon\.ini|http)\b

Boon.iniまたはhttpが文字列のどこかにある場合、trueを返します。 \bまたは単語の境界のため、httpdやhttpxyzzyなどの単語とは一致しません。必要に応じて、それらを削除するだけで、それらにも一致します。さらにキーワードを追加するには、パイプを追加します。

\b(boon\.ini|http|foo|bar)\b
13
Justin Poliey

探している単語に遭遇したときにsucceedとなる正規表現を記述し、条件を逆にすることで、十分に役立つかもしれません。

たとえば、Perlでは次を使用します。

if (!/boon\.ini|http/) {
    # the string passed!
}
4
Nathan Fellman
^[^£]*$

上記の式は、文字列からポンド記号のみを制限します。これにより、string以外のすべての文字が許可されます。

2
Manikandan

どの言語/正規表現ライブラリですか?質問はASP.NETの周りにあると思いました。その場合、この記事の「ネガティブルックヘッド」セクションを見ることができます。 http://msdn.Microsoft.com/en-us/library/ms972966.aspx =

厳密に言えば、正規表現の否定は、依然として正規言語を定義しますが、それを表現できるライブラリ/言語/ツールはほとんどありません。

負のlookahedでも同じことができますが、実際の構文は使用しているものによって異なります。ティムの答えは(?...)

1
Remo.D

これを(Tim Pietzckerの回答に基づいて)使用して、Googleアナリティクスプロファイルフィルターの非実稼働サブドメインURLを除外しました。

^\w+-*\w*\.(?!(?:alpha(123)*\.|beta(123)*\.|preprod\.)domain\.com).*$

ここでコンテキストを確認できます。 複数の単語を除外する正規表現

0
Jon Kern