在同一个变量上运行regexp两次

时间:2013-11-12 14:15:56

标签: regex perl

如何在同一个变量上运行regexp多次? 我想要

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

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

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

3 个答案:

答案 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'
        ];