Regex 如何在perl中解析字符串?

Regex 如何在perl中解析字符串?,regex,string,perl,Regex,String,Perl,我有一个字符串,它是一个IP地址列表和一个重要的数字 我正在尝试解析字符串,以便它只包含IP地址。或者更好的是,根据表示的IP地址数量创建多个字符串 我感觉我很接近,但没有雪茄 输入: $str=“[11.22.33.44]-30[55.66.77.88]-30” 预期产出: 11.22.33.44 55.66.77.88 我使用正则表达式解决此问题的第一次迭代: while ($tempBlackList =~ /(\w+)/g) { print "$1\n";

我有一个字符串,它是一个IP地址列表和一个重要的数字

我正在尝试解析字符串,以便它只包含IP地址。或者更好的是,根据表示的IP地址数量创建多个字符串

我感觉我很接近,但没有雪茄

输入:

$str=“[11.22.33.44]-30[55.66.77.88]-30”

预期产出:

11.22.33.44
55.66.77.88
我使用正则表达式解决此问题的第一次迭代:

while ($tempBlackList =~ /(\w+)/g) {
    print "$1\n";
}
while ($tempBlackList =~ /(\w+)(\w+)(\w+)(\w+)/g) {
    print "\"$1.$2.$3.$4\n";
}
这导致:

11
22
33
44
30
55
66
77
88
30
尝试解决此问题的第二次迭代:

while ($tempBlackList =~ /(\w+)/g) {
    print "$1\n";
}
while ($tempBlackList =~ /(\w+)(\w+)(\w+)(\w+)/g) {
    print "\"$1.$2.$3.$4\n";
}
这将导致不打印任何内容。我希望这是我想要的

任何帮助都将不胜感激。

/(\w+)(\w+)(\w+)(\w+)/g
模式匹配四个连续出现的
\w+
模式,该模式匹配一个或多个不包含点的字字符(点不是字字符)

如果在两组之间插入
\.
,该方法将起作用:

while($tempBlackList=~/(\w+)\(\w+)\(\w+)\(\w+)/g){
打印“$1.$2.$3.$4\n”;
}
然而,在这里你可以使用

my$tempBlackList=“[11.22.33.44]-30、[55.66.77.88]-30”;
而($tempBlackList=~/\[([^][]+)]/g){
打印“$1\n”;
}
输出:

11.22.33.44
55.66.77.88

但是,由于是一种众所周知的模式,您可以使用它来提取所有出现的情况:

my$tempBlackList=“[11.22.33.44]-30、[55.66.77.88]-30”;
而($tempBlackList=~/\b((25[0-5]| 2[0-4][0-9]|[01]?[0-9][0-9]?)(?:\(?2)){3})\b/g){
打印“$1\n”;
}

请参阅。

\w
不匹配