正则表达式从字符串中提取 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 地址 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
用于从封闭字符串中提取 IP 地址和端口的简单 Java 正则表达式