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

18 浏览
0 Comments

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

我正在尝试从字符串中提取IP地址。虽然我并不是第一个提出这个问题的人,但我确实找不到一个能满足我们需求的答案。\n如果在字符串中存在一个形式为xxx.xxx.xxx.xxx的组合,无论周围的文本如何,都应该提取出这个带有点号的数字。这样可以与Test-Connection一起使用。\n我不是在尝试确定一个IP地址是否有效,而是在尝试从字符串中提取IP地址。即使它是无效的,比如说900.999.800.254。\n示例:\n

输入             预期结果
-----             ---------------
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

\n到目前为止,我已经尝试了这里建议的正则表达式,但它们没有将IP地址作为输出存储在变量$Matches中。

0
0 Comments

正则表达式(Regex)是一种用于匹配文本模式的工具。在这个问题中,我们需要从一个字符串中提取出IP地址。为了解决这个问题,我们可以使用正则表达式来匹配IP地址的模式。

给定以下字符串列表:

$ips = @('IP_10.57.50.91',
    '10.57.50.73',
    '10.58.4.37 IP',
    'ip 10.63.1.22',
    'BELPRLIXH300',
    'ip 10.63'
)

我们可以使用以下正则表达式来匹配IP地址的模式:

$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"

然后,我们可以使用正则表达式的`Matches`方法来从字符串中提取匹配的IP地址:

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

但是,目前的问题是上述正则表达式无法匹配到`IP_10.57.50.91`,而是应该输出`10.57.50.91`。为了解决这个问题,我们需要去掉正则表达式中的第一个`\b`(单词边界)。

最终的解决方法是:

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

通过这个调整后的正则表达式,我们就可以正确地从字符串中提取出匹配的IP地址了。

0