質問

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

役に立ちましたか?

解決

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

(から抜粋 正規表現バディのライブラリ) は、boon.ini や http を含まない行と一致します。それがあなたが望んでいたものですか?

他のヒント

使用できる代替表現:

^(?!.*IgnoreMe).*$

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

^ そうしないと、評価時に否定的な先読みが「IgnoreMe」テキスト内またはテキスト外のどこかから開始され、望ましくない場所でも一致が発生する可能性があります。

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

(?!.*IgnoreMe).*$

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

式内で結果を否定するのではなく、コード内で否定する必要があります。こうすることで表現はかなりシンプルになります。

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

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

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

次のような正規表現を書くとうまくいくかもしれません。 成功する 探している単語が見つかったら、条件を反転します。

たとえば、perl では次のように使用します。

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

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

どの言語/正規表現ライブラリですか?あなたの質問はASP.NETに関するものだと思いました。その場合、この記事の「ネガティブルックヘッド」セクションを参照してください。http://msdn.microsoft.com/en-us/library/ms972966.aspx

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

否定的な検索も同じように機能しますが、実際の構文は使用しているものによって異なります。ティムの答えは次の例です (?...)

これを(Tim Pietzckerの回答に基づいて)使用して、Google Analyticsプロファイルフィルターの非運用サブドメインURLを除外しました。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top