我永远不会说我是正则表达式的专家,因为我缺乏理解,所以我对此问题很有疑问。如果有人可以请尝试向我解释如何处理这种情况我会非常感激。
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
任何建议都会非常感激,如果你可以教我一些东西我肯定不会抱怨。
答案 0 :(得分:3)
您可以使用:
^\w*\.(\w+)\s+(.*?) *(#[^#]*)$
#
,请务必在最后一个捕获组#
中加入(#[^#]*)
。*
以避免捕获第二组中的尾随空格。答案 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