質問
「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).*$
ここでコンテキストを確認できます。 複数の単語を除外する正規表現