正規表現を次のように一致させようとしています:
169.254.0.0-169.254.254.255
どうすればこれを達成できますか?
これまでのところ、私はこれを持っています:
169\.254\.([1-9]{1,2}|[1-9]{1,2}[1-4])
しかし、一致するはずのない 169.254.255.1 も検出されます。
助けてください!
ありがとう
正規表現を次のように一致させようとしています:
169.254.0.0-169.254.254.255
どうすればこれを達成できますか?
これまでのところ、私はこれを持っています:
169\.254\.([1-9]{1,2}|[1-9]{1,2}[1-4])
しかし、一致するはずのない 169.254.255.1 も検出されます。
助けてください!
ありがとう
これは、一般的な IP 検証に使用する正規表現です。
(([0-9](?!\d)|[1-9][0-9](?!\d)|1[0-9]{2}(?!\d)|2[0-4][0-9](?!\d)|25[0-5](?!\d))[.]?){4}
壊す:
1.`[0-9](?!\d)` -> Any Number 0 through 9 (The `(?!\d)` makes sure it only grabs stand alone digits)
2.`|[1-9][0-9](?!\d)` -> Or any number 10-99 (The `(?!\d)` makes sure it only grabs double digit entries)
3.`|1[0-9]{2}` -> Or any number 100-199
4.`|2[0-4][0-9]` -> Or any number 200-249
5.`|25[0-5]` -> Or any number 250-255
6.`[.]?` -> With or without a `.`
7.`{4}` -> Lines 1-6 exactly 4 times
これは、まだ IP アドレスの検証に失敗していません。
あなたの特定のケースでは、これでうまくいくはずです:
(169\.254\.)((([0-9](?!\d)|[1-9][0-9](?!\d)|1[0-9]{2}|2[0-4][0-9]|25[0-4])[.])(([0-9](?!\d)|[1-9][0-9](?!\d)|1[0-9]{2}|2[0-4][0-9]|25[0-5])))
169.254.255.1 を失敗させずに 169.254.(0-254).255 をチェックする方法を理解できなかったため、これは非常に長いです。
編集:コメントにより修正
正規表現([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])
は 0 ~ 254 に一致します。
詳細については、このページを参照してください
ジェネリック URI ( RFC3986: Uniform Resource Identifier (URI): Generic Syntaxで定義)のすべてのコンポーネントの正規表現を提供する記事を書きました 。
参照:正規表現 URI 検証
汎用 URI の構成要素の 1 つは IPv4 アドレスです。その記事のフリースペース モードの Python バージョンは次のとおりです。
re_python_rfc3986_IPv4address = re.compile(r""" ^
# RFC-3986 URI component: IPv4address
(?: (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) \.){3} # (dec-octet "."){3}
(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) # dec-octet "."
$ """, re.VERBOSE)
コメントを外した JavaScript バージョン:
var re_js_rfc3986_IPv4address = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;