我正在尝试解析单个字符串,并从具有相同正则表达式条件的相同字符串中获取多个数据块。我正在解析一个静态的HTML文档(由于未公开的原因,我无法使用HTML解析器来完成这项工作。)我有一个表达式如下:
$string =~ /\<img\ssrc\="(.*)"/;
我希望获得1美元的价值。但是,在一个字符串中,有很多像这样的img标签,所以我需要像返回的数组(@ 1?)这样可能吗?
答案 0 :(得分:22)
作为Jim的回答,使用/ g修饰符(在列表上下文中或循环中)。
但要注意贪婪,你不希望.*
匹配超过必要(并且不要逃避&lt; =,它们并不特别)。
while($string =~ /<img\s+src="(.*?)"/g ) {
...
}
答案 1 :(得分:10)
@list = ($string =~ m/\<img\ssrc\="(.*)"/g);
g 修饰符匹配字符串中的所有匹配项。列表上下文返回所有匹配项。请参阅perlop中的 m // 运算符。
答案 2 :(得分:5)
你只需要在比赛结束时使用全局修饰符/ g。然后循环 直到没有剩余的匹配
my @matches;
while ($string =~ /\<img\ssrc\="(.*)"/g) {
push(@matches, $1);
}
答案 3 :(得分:3)
使用左侧的/ g修饰符和列表上下文,如
@result = $string =~ /\<img\ssrc\="(.*)"/g;