1

如何在同一个变量上多次运行正则表达式?我想

$$contRef =~ /Kurs.*?(\d+,?\d*)<\/span/msgi;  

 $$contRef =~ /Price(\d+,?\d*)<\/span/msgi;

IIRC 正则表达式设置一个指针,如果我想再次找到任何模式并从头开始,我需要重置变量。我不想将内容复制到其他变量。我希望重置指针以便能够从头开始搜索。

4

3 回答 3

2

您正在寻找的正是您刚刚粘贴的内容。

$$contRef =~ /Kurs.*?(\d+,?\d*)<\/span/msgi;  
# Do stuff with $1
# ...
# ...
$$contRef =~ /Price(\d+,?\d*)<\/span/msgi;
# Do new stuff with the new $1
# ...
# ...
于 2013-11-12T14:30:42.780 回答
1

也许您对变量的不寻常使用是问题所在?这工作并打印 9922

$a="Kursplat99</spanPrice22</span";

$contRef = "a";

$$contRef =~ /Kurs.*?(\d+,?\d*)<\/span/msgi;  

print $1;

$$contRef =~ /Price(\d+,?\d*)<\/span/msgi;

print $1;
于 2013-11-12T14:36:46.730 回答
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'
        ];
于 2013-11-12T17:54:30.813 回答