Perl Regex多个捕获组

时间:2014-05-16 15:15:02

标签: regex perl

我永远不会说我是正则表达式的专家,因为我缺乏理解,所以我对此问题很有疑问。如果有人可以请尝试向我解释如何处理这种情况我会非常感激。

string = "hello.world with_args, and_more_args #plus a comment

正则表达式

/^\w*\.(\w+)\s+(.*?)([^#]*)$/

1. world
2. with_args, and_more_args #
3. plus a comment

我希望的输出是

1.world
2.with_args, and_more_args
3.#plus a comment

任何建议都会非常感激,如果你可以教我一些东西我肯定不会抱怨。

2 个答案:

答案 0 :(得分:3)

您可以使用:

^\w*\.(\w+)\s+(.*?) *(#[^#]*)$

Online Demo

  • 要捕获最后一组中的#,请务必在最后一个捕获组#中加入(#[^#]*)
  • 我在组#和#3之间添加*以避免捕获第二组中的尾随空格。

答案 1 :(得分:2)

最好在第二次捕获中检查非散列字符;否则模式将仅匹配带注释的行。

我建议这个

use strict;
use warnings;

my $s = 'hello.world with_args, and_more_args #plus a comment';

$s =~ / \w*\.(\w+) \s+ ([^#]*) (#.*)? /x;

print "$_\n" for $1, $2, $3;

<强>输出

world
with_args, and_more_args 
#plus a comment