Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用单个python正则表达式检查主机名和IP地址(v4和v6)?_Python_Regex - Fatal编程技术网

使用单个python正则表达式检查主机名和IP地址(v4和v6)?

使用单个python正则表达式检查主机名和IP地址(v4和v6)?,python,regex,Python,Regex,是否可以使用单个正则表达式检查字符串,并验证它是否匹配有效的IPv4或IPv6地址,或者是否匹配除点(.)之外没有特殊字符的主机名 我对IPv4和IPv6有单独的正则表达式,但如何将它们结合起来来完成上述工作 提前感谢, 丹你可以用一个正则表达式,但它会非常难看。要么 创建单独的正则表达式作为字符串,然后将它们组合起来。清晰得多。或者 分别测试每个正则表达式。也更清楚 Perl-ish示例: if ( $foo =~ /$ipv4_re/ or $foo =~ /$ipv6_re/ or $

是否可以使用单个正则表达式检查字符串,并验证它是否匹配有效的IPv4或IPv6地址,或者是否匹配除点(.)之外没有特殊字符的主机名

我对IPv4和IPv6有单独的正则表达式,但如何将它们结合起来来完成上述工作

提前感谢,

你可以用一个正则表达式,但它会非常难看。要么

  • 创建单独的正则表达式作为字符串,然后将它们组合起来。清晰得多。或者
  • 分别测试每个正则表达式。也更清楚
Perl-ish示例:

if ( $foo =~ /$ipv4_re/ or $foo =~ /$ipv6_re/ or $foo =~ /$hostname_re/ ) {
    ...
}
话虽如此,Python中可能有一些库可以为您验证这些东西,就我个人而言,我宁愿依赖它们。

您可以使用单个正则表达式,但这将非常难看。要么

  • 创建单独的正则表达式作为字符串,然后将它们组合起来。清晰得多。或者
  • 分别测试每个正则表达式。也更清楚
Perl-ish示例:

if ( $foo =~ /$ipv4_re/ or $foo =~ /$ipv6_re/ or $foo =~ /$hostname_re/ ) {
    ...
}
话虽如此,Python中可能有一些库可以为您验证这些东西,就我个人而言,我宁愿依赖它们。

试试:

(?:\d{1,3}\.){3}\d{1,3}|                    (?# IPv4 address)
[:a-fA-F0-9]*:[:a-fA-F0-9]*:[:a-fA-F0-9.]*| (?# IPv6 address)
[-a-z0-9A-Z]+\.[-a-z0-9A-Z]*                (?# domain name)
当然,您可以用更复杂的表达式替换单个表达式。

试试:

(?:\d{1,3}\.){3}\d{1,3}|                    (?# IPv4 address)
[:a-fA-F0-9]*:[:a-fA-F0-9]*:[:a-fA-F0-9.]*| (?# IPv6 address)
[-a-z0-9A-Z]+\.[-a-z0-9A-Z]*                (?# domain name)
(?P<ihost>\\[(?:(?:[0-9A-F]{1,4}:){6}(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?: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]?)))|::(?:[0-9A-F]{1,4}:){5}(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?: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]?)))|[0-9A-F]{1,4}?::(?:[0-9A-F]{1,4}:){4}(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?: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]?)))|(?:(?:[0-9A-F]{1,4}:)?[0-9A-F]{1,4})?::(?:[0-9A-F]{1,4}:){3}(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?: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]?)))|(?:(?:[0-9A-F]{1,4}:){,2}[0-9A-F]{1,4})?::(?:[0-9A-F]{1,4}:){2}(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?: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]?)))|(?:(?:[0-9A-F]{1,4}:){,3}[0-9A-F]{1,4})?::(?:[0-9A-F]{1,4}:)(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?: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]?)))|(?:(?:[0-9A-F]{1,4}:){,4}[0-9A-F]{1,4})?::(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?: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]?)))|(?:(?:[0-9A-F]{1,4}:){,5}[0-9A-F]{1,4})?::[0-9A-F]{1,4}|(?:(?:[0-9A-F]{1,4}:){,6}[0-9A-F]{1,4})?::|v[0-9A-F]+\\.(?:[a-zA-Z0-9_.~-]|[!$&'()*+,;=]|:)+)\\]|(?:(?:(?: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]?))|(?:(?:[a-zA-Z0-9._~-]|[\xa0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef\U00010000-\U0001fffd\U00020000-\U0002fffd\U00030000-\U0003fffd\U00040000-\U0004fffd\U00050000-\U0005fffd\U00060000-\U0006fffd\U00070000-\U0007fffd\U00080000-\U0008fffd\U00090000-\U0009fffd\U000a0000-\U000afffd\U000b0000-\U000bfffd\U000c0000-\U000cfffd\U000d0000-\U000dfffd\U000e1000-\U000efffd])|%[0-9A-F][0-9A-F]|[!$&'()*+,;=])*)
当然,你可以自由地用更复杂的表达式替换个人表达式。

<<<<当然当然,当然,你可以自由地,你可以自由地,你可以用更复杂的表达式替换个人表达。当然,你当然,当然,你可以自由。当然,你可以自由。当然,你可以自由。。。。。。<<::(?:[0-9A-F]{1,4}:{5}(?[0-9A-F]{1,4}:[0-9A-F]{1,4}|)(?:(?:(?:)25[0-5]| 2[0-4][0-9]|[01]?[0-9][0-9[0-0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-0-9[0-9-0-9[0-9-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-[0-9][0-9](?:[0-9A-F]{1,4}:[0-9A-F]{1,4}:[0-9A-F]{1,4}:[0-9A-F]{1,4}:::(?:[0-9A-F]{1,4}:{3}([0-9A-F]{1,4}:[0-9A-F]{1,4}:[0-9A-F]{1,4}:[0-9A-F]]?[0-9[0-0-9[0-9[0-9[0-0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-0-9[0-0-9[0-0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-[0-9][0-9][0-9]?[0-9][0-9]?\\\){3}(:25[0-5]| 2[0-4][0-9][0-9]?[0-9][0-9]?){1,4}{,3}[0-9A-F]{1,4}:(?:[0-9A-F]{1,4}:(?:[0-9A-F]{1,4})3{3{3{3{3{3{3{3{3{3{3{3{3{3{3:5[0-5[0-5[0-5[0-0-5[0-0-5[0-0-5[0-0-5[0-5[0-5[0-5[0-5[0-5[0[0-5[0-5[0[0-5[0-5[0-5[0-5[0-5[0-5[0-5[0-5[0-5[0-4[0-4[0-5[0-5[0-4[0-5[0-5[0-5[0-5[0-5[0-5[0-5[0-5[0-5[0-5[0-5[0-5[0-5[0-5[|2[0-4][0-9][0-9]|[01]|[0-9][0-9][0-9]|[01]|[0-9][0-9]|[01]|[0-9][0-9][0-9]|(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}:[0-9A-F]{1,4}:[0-9A-F]{1,4}](3)以下:::::::::::::::::::::::[1-a-a-zA-Z0-10-10-10-10-10-10-9-9..[[[1-1-1.4 5 5 5 5[1-1.1.4 5 5[1-1-1-4-4-1-5-5-1-5-5-5-5-1[0-1-5[0-4[0-4[0-4][[0-4[0-4][0-4[0-4[0-4][[0-4[0-4][[0-4[0-9][[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0|(0 0 0 0 0-\0 0 0 0-\0 0 0 0-\0 0 0 0 0 0-\0 0 0 0 0 0-\u0001 FFFD\U0002 0 0 0 0 0-\u0002 0 0 0 0 0 0 0-\0 0 0 0 0 0 0 0 0 0 0-\0 0 0 0 0 0 0 0 0 0 0 0 0 0-\0 0 0 0 0 0 0 0 0 0 0 0 0 0-\0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0-\0 0 0 0 0 0 0 0-\0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0---0 0 0 0 0 0-\0 0 0 0 0-\0 0 0 0 0 0 0 0 0 0 0 0-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0-----0 0 0 0 0 0 0%[0-9A-F][0-9A-F]|[!$&'()*+,;=])*)
(?P<ihost>\\[(?:(?:[0-9A-F]{1,4}:){6}(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?: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]?)))|::(?:[0-9A-F]{1,4}:){5}(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?: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]?)))|[0-9A-F]{1,4}?::(?:[0-9A-F]{1,4}:){4}(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?: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]?)))|(?:(?:[0-9A-F]{1,4}:)?[0-9A-F]{1,4})?::(?:[0-9A-F]{1,4}:){3}(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?: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]?)))|(?:(?:[0-9A-F]{1,4}:){,2}[0-9A-F]{1,4})?::(?:[0-9A-F]{1,4}:){2}(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?: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]?)))|(?:(?:[0-9A-F]{1,4}:){,3}[0-9A-F]{1,4})?::(?:[0-9A-F]{1,4}:)(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?: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]?)))|(?:(?:[0-9A-F]{1,4}:){,4}[0-9A-F]{1,4})?::(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?: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]?)))|(?:(?:[0-9A-F]{1,4}:){,5}[0-9A-F]{1,4})?::[0-9A-F]{1,4}|(?:(?:[0-9A-F]{1,4}:){,6}[0-9A-F]{1,4})?::|v[0-9A-F]+\\.(?:[a-zA-Z0-9_.~-]|[!$&'()*+,;=]|:)+)\\]|(?:(?:(?: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]?))|(?:(?:[a-zA-Z0-9._~-]|[\xa0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef\U00010000-\U0001fffd\U00020000-\U0002fffd\U00030000-\U0003fffd\U00040000-\U0004fffd\U00050000-\U0005fffd\U00060000-\U0006fffd\U00070000-\U0007fffd\U00080000-\U0008fffd\U00090000-\U0009fffd\U000a0000-\U000afffd\U000b0000-\U000bfffd\U000c0000-\U000cfffd\U000d0000-\U000dfffd\U000e1000-\U000efffd])|%[0-9A-F][0-9A-F]|[!$&'()*+,;=])*)
(从)上述人士(从)上述人士(从)上述人士(从)上述人士(从)上述人士(从)上述人士(从)上述人士(从)上述人士(从)上述人士(从)上述人士(从)从(从)上述人士(从)上述人士(从)上述人士(从)从)上述人士(从)的(从)p p)及(从)上述人士(从)及(p)及(p::::::::[0-9A-9A-9A-9A-A-A-A-F{{{{{{{{,(,(,(,(,(,(,(,(从)上述)()(从)(从)(从)(从)上述)()(从)(从)()(从)上述人士)()(从)上述)()()()()()()(从)上述)()(从)()()()()()()(从)上述人士)()(从)上述)()()()(从)()(从)上述)()()()()()()()()()()()()()()()()()()()()()(从)[0-9][0-9][0-9][0-9][0-9][0-9][0-4][0-9][0-9][0-4][0-9][0-9][0-9][0-9][0-9][0-9][0-9][1][1,4][1,4][1,4][1,4][0-9][1][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][1][0-9][0-9][0-9][1][0-9][1][0-9][0-9][0-9][0-9][1][1][1][[0-9A-9A-F[0-9A-F[[0-9A-F[1,1,4}:[0-9A-F[1[1,4}[0-9A-F[1,0[0-9A-0-9A-F[0-9A-F[1[0-9A-9[0-9A[0-9A-9[0[0-9A-9[0[0-9A-9A-F[0-F[1[1[1[1[1[1[1[0-9A-9A-9A-9A-9[1[1[1[1[1[1[1[0-9[1[1[1[1[1[0-9[1[1[0-9[0-5[0-5[0-5[0-5[0-5[0-5[0-5[0-5[0-5[0-5[0-5[0-5[0-9A-F]{1,4}:::(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}:[0-9A-F]{1,4};(?:(?:):(?:)25[0-5]| 2[0-4][0-9]|[01],[0-9][0-9]\)\。{3}:25[0-5];2[0-4][0-9]。[0-9]:[0-9]。[0-9]:[0-9]以下::::::::::::::::::::::::::::::::::::::::::::::[0-9A-9A-F{{1,1,4}:::::::{{{1,1.1.1[1.1.1-1.4}::::::::::::::::::::{{{{{{{{{{{{2{{{[0-1[0-1[0-1[0-9-9-9-9-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1[[[[[0-1-1-1-1-1-1-1-1-1-5[[[[0-1-9-9-5[[[[[0-9-1[[[[(?:(?:[0-9A-F]{1,4}:{,3}[0-9A-F]{1,4})::(?:[0-9A-F]{1,4}:(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}:(?:(?:):(?:[25[0-5]{2[0-4][0-9].[0-9]\[0-9]\[0-9]{1,4]\[0-9]。[0-9]\[0-0]?[0-9-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9-9[0-9[0-0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9-9[0-9[0-9-9[0-9-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[1[1,4[1[1[1[1[1.4[1[1[1[1[1.4[1.4](5)5}[0-9A-9A-9A-9A-F[0-9A-9A-F[0-9A-F[0-9A-F]{{1,4}})以下:::::::::::::::::::::::)))))))):::::::::::::::::::[0-9A-9A-9A-9A-F-F-F-F][[[[[0-F]{{{{{{{{[1,1,1,1,1,1,1,1,1,1,1,1,4}。)。)))))):::::::::::::::::::::::::::::::::::[0-0-0-9-9-9-9-9-9-9-9-9-9-[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]|(?:[a-zA Z0-9.-]|(0 0 0 0 0-\0 0 0 0-\0 0 0 0-\0 0 0 0 0 0-\0 0 0 0 0 0-\u0001 FFFD\U0002 0 0 0 0 0-\u0002 0 0 0 0 0 0 0-\0 0 0 0 0 0 0 0 0 0 0-\0 0 0 0 0 0 0 0 0 0 0 0 0 0-\0 0 0 0 0 0 0 0 0 0 0 0 0 0-\0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0-\0 0 0 0 0 0 0 0-\0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0---0 0 0 0 0 0-\0 0 0 0 0-\0 0 0 0 0 0 0 0 0 0 0 0-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0-----0 0 0 0 0 0 0%[0-9A-F][0-9A-F]|[!$&'()*+,;=])*)
(from)

只需执行:
(regexIPv4)|(regexIPv6)
这一定是一个巨大的正则表达式,至少如果它匹配所有有效的主机名并拒绝所有无效的主机名。谢谢Bart,但是主机名呢?你可能想结合@BartKiers所说的内容进行检查。另外,@dan:如果你不关心正确的匹配,就使用alternation:
。如果你关心,就不要使用正则表达式进行匹配e作业。只需执行:
(regexIPv4)|(regexIPv6)
这一定是一个巨大的正则表达式,至少如果它匹配所有有效的主机名并拒绝所有无效的主机名。谢谢Bart,但是主机名呢?你可能想结合@BartKiers所说的内容进行检查。另外,@dan:如果你不关心正确的匹配,就使用alternation:
。如果你关心,就不要使用正则表达式进行匹配电子作业。