如何在同一个变量上多次运行正则表达式?我想
$$contRef =~ /Kurs.*?(\d+,?\d*)<\/span/msgi;
和
$$contRef =~ /Price(\d+,?\d*)<\/span/msgi;
IIRC 正则表达式设置一个指针,如果我想再次找到任何模式并从头开始,我需要重置变量。我不想将内容复制到其他变量。我希望重置指针以便能够从头开始搜索。
您正在寻找的正是您刚刚粘贴的内容。
$$contRef =~ /Kurs.*?(\d+,?\d*)<\/span/msgi;
# Do stuff with $1
# ...
# ...
$$contRef =~ /Price(\d+,?\d*)<\/span/msgi;
# Do new stuff with the new $1
# ...
# ...
也许您对变量的不寻常使用是问题所在?这工作并打印 9922
$a="Kursplat99</spanPrice22</span";
$contRef = "a";
$$contRef =~ /Kurs.*?(\d+,?\d*)<\/span/msgi;
print $1;
$$contRef =~ /Price(\d+,?\d*)<\/span/msgi;
print $1;
正如评论中所建议的那样,也许一个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'
];