正则表达式从字符串中提取 IP 地址 [重复]

Posted

技术标签:

【中文标题】正则表达式从字符串中提取 IP 地址 [重复]【英文标题】:Regex to extract an IP address from a string [duplicate] 【发布时间】:2015-09-19 14:50:48 【问题描述】:

我正在尝试从字符串中检索 IP 地址。我绝对不是第一个提出这个问题的人,但我找不到完全符合我们需要的答案。

如果字符串中的某处有 xxx.xxx.xxx.xxx 的组合,不管它周围的文本如何,它都应该提取这个数字,中间有点。所以它可以和Test-Connection一起使用。

我不想确定 IP 地址是否有效,但我想从字符串中检索 IP 地址。即使它是无效的,比如 900.999.800.254。

示例:

Input             Expected result
-----             ---------------
IP_10.57.50.91    10.57.50.91
10.57.50.73       10.57.50.73
10.58.4.37 IP     10.58.4.37
ip 10.63.1.22     10.63.1.22
BELPRLIXH300      $False
ip 10.63          $False

到目前为止,我已经尝试了正则表达式建议的 here,但它们没有在变量 $Matches 中将 IP 地址作为输出提供给我们。

【问题讨论】:

感谢您的建议,但如果我尝试'IP_10.10.22.45' -match "^(([0-9]|[1-9][0-9]|1[0-9]2|2[0-4][0-9]|25[0-5])\.)3([0-9]|[1-9][0-9]|1[0-9]2|2[0-4][0-9]|25[0-5])$",它不起作用并给我$False 而不是号码。 我使用您链接中的 ExtractValidIpAddress 函数成功测试了每个 IP 地址。 是的,它确实给出了$True$False,但它没有提取与Test-Connection 一起使用的数字。 移除锚点... ^,$ 如果我尝试这个'IP_10.10.22.45' -match "(([0-9]|[1-9][0-9]|1[0-9]2|2[0-4][0-9]|25[0-5])\.)3([0-9]|[1-9][0-9]|1[0-9]2|2[0-4][0-9]|25[0-5])" 它不会给出正确的输出,甚至在$Matches 中也不会。 【参考方案1】:
$ips = @('IP_10.57.50.91',
    '10.57.50.73',
    '10.58.4.37 IP',
    'ip 10.63.1.22',
    'BELPRLIXH300',
    'ip 10.63'
)

$regex = [regex] "\b(?:(?: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]?)\b"

$regex.Matches($ips) | % $_.value 

【讨论】:

唯一的问题是这个不匹配IP_10.57.50.91。它还应该输出号码10.57.50.91 删除正则表达式中的第一个 \b(单词边界)

以上是关于正则表达式从字符串中提取 IP 地址 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

用java 正则表达式 提取IP地址

用于从封闭字符串中提取 IP 地址和端口的简单 Java 正则表达式

如何在 linux shell 中使用正则表达式从文件中提取 IP 地址?

java 正则表达式 提取IP

PHP正则表达式匹配IP地址[重复]

Java正则表达式提取String字符串中的IP地址