1. ホーム
  2. regex

[解決済み] 何にもマッチしない正規表現

2022-05-07 03:02:40

質問

くだらない質問に聞こえるかもしれませんが、何人かの開発者仲間と長い間話していて、楽しいことを考えるように聞こえました。

どんな文字列にも絶対にマッチしないREGEXとはどのようなものでしょうか?

編集 : なぜこれが欲しいのか?第一に、このような表現を考えるのが面白いから、第二に、あるスクリプトで必要だからです。

そのスクリプトの中で、私は辞書を次のように定義しています。 Dictionary<string, Regex> . これには、ご覧のように、文字列と式が含まれています。

この辞書をもとに、この辞書を参照するだけのメソッドを作成し、そのうちのひとつは解析されたログファイルに対して正規表現をマッチングさせます。

ある式にマッチした場合、別の Dictionary<string, long> には、式が返す値が追加されます。そこで、辞書の式にマッチしないログメッセージをキャッチするために、"unknown"という新しいグループを作りました。

このグループには、他のどのグループにもマッチしなかったものがすべて追加されます。しかし、"unknown"式が(誤って)ログメッセージにマッチしないように、どんな文字列を与えても絶対にマッチしない式を作らなければなりませんでした。

というわけで、この「どうでもいい質問」の理由は以上です。

解決方法は?

これは、実はとても簡単なことなんです。 実装/フラグに依存しますが *:

$a

文字にマッチします a を文字列の末尾に追加します。がんばってください。

警告

この式は高価です。行全体をスキャンして行末のアンカーを見つけ、それから初めて a で、負のマッチを返します。(詳しくは下のコメントをご覧ください)。


* 元々、私はマルチラインモードの正規表現についてあまり考えていませんでした。 $ も行末にマッチします。実際には、空の文字列 の直前で、改行 のような普通の文字が a の後に現れることはありません。 $ .