2

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

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

我想访问字符串末尾的数字,所以打算做一个匹配

/(\d+)/s

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

格式化正则表达式以便能够单独访问每个数字的最佳方法是什么?我是一名 C++ 开发人员,并且正在学习 Perl,因此我正在尝试找到最简洁的 Perl 方法来完成此任务。

谢谢你的帮助。

4

4 回答 4

6

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

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

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

于 2009-05-07T15:53:57.540 回答
4

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

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

您的列表现在应该包含字符串中的所有数字组。有关更多信息,请参阅匹配运算符的文档。

于 2009-05-07T16:28:40.373 回答
1

“在标量上下文中,每次执行 m//g 都会找到下一个匹配项,如果匹配则返回 true,如果没有进一步匹配则返回 false”--(From perldoc perlop)

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

while ($string =~ /(\d+)/g) {
    push @queuelist, $1;
}
于 2009-05-07T15:46:08.150 回答
0

我会做这样的事情:

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

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

于 2009-05-07T15:43:39.497 回答