如何在同一个变量上运行regexp多次? 我想要
$$contRef =~ /Kurs.*?(\d+,?\d*)<\/span/msgi;
和
$$contRef =~ /Price(\d+,?\d*)<\/span/msgi;
IIRC regexp设置指针,如果我想再次找到任何模式并从头开始,我需要重置变量。我不想将内容复制到其他变量。 我希望重置指针,以便能够从头开始搜索。
答案 0 :(得分:2)
您正在寻找的正是您刚刚粘贴的内容。
$$contRef =~ /Kurs.*?(\d+,?\d*)<\/span/msgi;
# Do stuff with $1
# ...
# ...
$$contRef =~ /Price(\d+,?\d*)<\/span/msgi;
# Do new stuff with the new $1
# ...
# ...
答案 1 :(得分:1)
也许您对变量的不寻常使用是问题?这适用于打印9922
$a="Kursplat99</spanPrice22</span";
$contRef = "a";
$$contRef =~ /Kurs.*?(\d+,?\d*)<\/span/msgi;
print $1;
$$contRef =~ /Price(\d+,?\d*)<\/span/msgi;
print $1;
答案 2 :(得分:0)
正如评论中所建议的那样,或许while
,替换(|
)和捕获数组在这里会有所帮助:
use strict;
use warnings;
use Data::Dumper;
my $string = "Kursplat99</span>Price22</span";
my @array;
push @array, $1 while $string =~ /(?:Kurs.*?|Price)(\d+,?\d*)<\/span/msgi;
print Dumper \@array if @array;
输出:
$VAR1 = [
'99',
'22'
];