2017-06-20 12 views
0

tracerouteの出力にあるIPアドレスを正規表現で照合しようとしています。 。regex101とそれにRegexとIPアドレスの一致

([0-9]{1,3}.?){4} 

私はそれをテストしている:私はそれが十分に(すなわち999.999.999.999のようなものを出力していない私は、次の正規表現をしようとしているtracerouteが有効であると仮定しても安全ですので、それらを検証するつもりはありませんよIPアドレスを検証しない。しかし、私は

echo '192.168.1.1 foobar' | grep '([0-9]{1,3}.?){4}' 

は、私が何を取得しようとすると。私は何をしないのですか?

+4

そして 'grep -E '([0-9] {1,3} \。?){4}' 'を使用している場合は? POSIX EREパターンを使用しましたが、 '-E'オプションを渡しませんでした。したがって、POSIX BREは 'grep 'によって使用されました。 –

+0

@WiktorStribiżewこれがうまくいった。私はそれを受け入れることができるように答えを詳述するように気をつけますか? – mrbolichi

+0

私はこのコメントに気づいていませんでしたが、実際にこのアップデートで作業していましたが、ここでBRE構文をどのように使用できるかを示しています。 –

答えて

4

をあなたは、POSIX EREパターンを使用しますが、を持っている-Eオプションを渡しませんでしたPOSIX EREフレーバーを使用します。したがって、grepはPOSIX BREを代わりに使用しました。{n,m}限定記号と(...)をエスケープして特別な正規表現演算子として解析する必要があります。

grepを使用して、パターンの仕事あなたが使用することができます望んでいた方法を作るために:

grep -E '([0-9]{1,3}\.?){4}' 

(あなたはそれが唯一のリテラルのドットと一致することができるように.をエスケープする必要があります。)

参照してください。 online demo

Aと同じ正規表現のPOSIX BREのバージョン:

grep '\([0-9]\{1,3\}\.\?\)\{4\}' 

しかし.はオプションであるため、この正規表現は、いくつかの数字の文字列にマッチします。あなたは

grep -E '[0-9]{1,3}(\.[0-9]{1,3}){3}' 

またはBREバージョンとしてパターンをアンロールすることによってそれを解決することがあります。

grep '[0-9]\{1,3\}\(\.[0-9]\{1,3\}\)\{3\}' 

another demoを参照してください。

基本的には一致する:

  • [0-9]{1,3} - 任意のASCII数字の1〜3出現
  • (\.[0-9]{1,3}){3} - の3出現:
    • \. - リテラル.
    • [0-9]{1,3} - 1任意のASCII桁の3回の出現

あなたはさらに

実は、あなたがmore precise IP matching regexを使用する場合がありますなど、(\</\>または\bすることができます)単語の境界でそれを微調整することがあります。

+1

正規表現[動作しません](https://regex101.com/r/qFE95M/1)。代わりに[this](https://regex101.com/r/qFE95M/2)を使用してください。 – Olian04

+0

@ Olian04:あなたは何を意味するのか理解しています。私はOP正規表現をPOSIX BRE/EREに翻訳しました。編集されました。 –

+0

ありがとうございます。これは、私が探していたこととまったく同じものでした。 – mrbolichi

関連する問題