如何从Perl字符串中提取不同数量的数字组?

时间:2009-05-07 15:39:54

标签: regex perl multiple-matches

我正在尝试使用以下格式解析Perl中的字符串:

Messages pushed to the Order Book queues 123691 121574 146343 103046 161253

我想访问字符串末尾的数字,所以打算像

那样进行匹配

/(\d+)/s

我的问题是末尾的值包含可变数量的字符串。

格式化正则表达式以便能够单独访问每个数字的最佳方法是什么?我是一名C ++开发人员,我只是在学习Perl,所以我试图找到最干净的Perl方法来实现这一目标。

感谢您的帮助。

4 个答案:

答案 0 :(得分:6)

只需使用/ g标志使匹配运算符执行全局匹配。在列表上下文中,匹配运算符将所有结果作为列表返回:

@result = $string =~ /(\d+)/g;

如果没有其他数字而不是尾随数字,则此方法有效。

答案 1 :(得分:4)

您可以在列表上下文中使用匹配运算符和全局标志来获取所有括号捕获的列表。例如:

@list = ($string =~ /(\d+)/g);

您的列表现在应该包含字符串中的所有数字组。 有关详细信息,请参阅match operator上的文档。

答案 2 :(得分:1)

“在标量上下文中,m // g的每次执行都会找到下一个匹配,如果匹配则返回true,如果没有其他匹配则返回false” - (来自perldoc perlop

所以你应该能够创建一个全局正则表达式循环,如下所示:

while ($string =~ /(\d+)/g) {
    push @queuelist, $1;
}

答案 3 :(得分:0)

我会做这样的事情:

my @numbers;
if (m/Messages pushed to the Order Book queues ([\d\s]+)/) {
   @numbers = split(/\s+/, $1);
}

无需将其填入一个正则表达式。