0

20.20.20.20 のように、2 つの IP アドレス/ホスト名を正規表現と一致させる必要があります。

should match with      20.20.20.20
should match with      [http://20.20.20.20/abcd]
should not match with  20.20.20.200
should not match with  [http://20.20.20.200/abcd]
should not match with  [http://120.20.20.20/abcd]
should match with      AB_20.20.20.20
should match with      20.20.20.20_AB

現在、私はこの正規表現のようなものを使用しています:"(.*[^(\w)]|^)20.20.20.20([^(\w)].*|$)" しかし、最後の 2 つのケースでは機能していません。"\w"は[a-zA-Z0-9_] と同じです。ここでもアンダースコア「_」を削除したいと思います。別の組み合わせを試しましたが、成功できませんでした。この正規表現について教えてください。

4

2 に答える 2

1
(.*[_]|[^(\w)]|^)10.10.10.10([_]|[^(\w)].*|$)

私はこれにもう少し時間を費やしました.この正規表現はうまくいくようです.

于 2012-07-17T13:02:03.913 に答える
0

使用している言語はわかりませんが、Perlのような正規表現を使用すると、次の短い式を使用できます。

(?:\ b | \ D)20 \ .20 \ .20 \ .20(?:\ b | \ D)

これは効果的に言う:

  1. 単語の境界(\b、ここでは単語の先頭)または数字以外の(\D)に一致します。
  2. IPアドレスを一致させます。
  3. 単語の境界(\b、ここでは単語の終わり)または数字以外の(\D)に一致します。

注1: ?:グループ化によって(\b|\D)後方参照が作成されないようにします。つまり、見つかったものを保存します。おそらく、単語の境界/数字以外を保存する必要はありません。実際に保存する必要がある場合は、2つを削除してください?:

注2:これは難しいかもしれませんが、正規表現のIPアドレス部分のドットをエスケープする必要があります。そうしないと、それらの位置で他の文字と一致することになります。20.20.20.20の代わりにを使用すると20\.20\.20\.20、たとえば、ログファイルを検索するときにタイムスタンプを含む行と一致する場合があります...

2012-07-18 20:20:20,20 INFOアプリケーションの起動に成功しました、IP = 20.20.20.200

...あなたがIPアドレスを探していて、その特定のアドレス(20.20.20.200)が明示的に一致してはならない場合でも、あなたの質問によると。確かに、この例はかなりエッジケースです。

于 2012-07-18T08:58:55.500 に答える