我正在尝试使用 Perl 和Regexp::Grammars
CPAN 模块从程序中的注释中捕获免费标签。
use strict;
use v5.10;
use YAML;
my $s = q{
junk code;
// here be tags #:tag1:
junk code 2;
// another one #:tag2:
junk ...;
};
my $rg = do {
use Regexp::Grammars;
qr{
<nocontext: >
^ .* <Tagger> .* $
<rule: Tagger> <[MATCH=single_tag]> +
<token: single_tag> \#\:<tag>\:
<token: tag> <matchline> \w+
}xms;
};
if( $s =~ $rg ) {
say Dump( \%/ );
} else {
say 'no match';
}
但是 YAML 输出显示我只捕获了最后一个标签:
---
Tagger:
- tag:
matchline: 5
如何匹配输入数据中的所有标签?
而且...如何在不打开嘈杂的上下文字符串(删除nocontext:
指令)的情况下获得匹配的标签字符串,以便最终结果更具可读性,即:
---
Tagger:
- tag: tag1
matchline: 3
- tag: tag2
matchline: 5