1. ホーム
  2. regex

[解決済み] 正規表現によるIPv4アドレスの検証

2022-03-07 10:20:34

質問

IPv4検証のための効率的な正規表現を取得しようとしていますが、あまりうまくいきません。一時期は (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?(\.|$)){4} しかし、それはいくつかの奇妙な結果を生成します。

$ grep --version
grep (GNU grep) 2.7
$ grep -E '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?(\.|$)){4}\b' <<< 192.168.1.1
192.168.1.1
$ grep -E '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?(\.|$)){4}\b' <<< 192.168.1.255
192.168.1.255
$ grep -E '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?(\.|$)){4}\b' <<< 192.168.255.255
$ grep -E '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?(\.|$)){4}\b' <<< 192.168.1.2555
192.168.1.2555

すでに質問され回答されていないか検索してみましたが、他の回答は単に1~3の数字の4つのグループを決定する方法を示しているか、私にはうまくいかないようです。

どのように解決するのですか?

すでに答えは出ているのですが、元のアプローチのどこが悪かったのか気になる方のために念のため説明すると、交互配列の周りに括弧が必要で、そうしないと (\.|$) は200未満の場合のみ必要です。

'\b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4}\b'
    ^                                    ^