【发布时间】:2017-08-02 19:23:26
【问题描述】:
我正在尝试用 perl 解析一个字符串并将匹配项放入一个数组中。
例如。 "FUNC1(VALUE1) VALUE1、VALUE2、FUNC2(FUNC1(VALUE3)) VALUE3、VALUE4、FUNC3(VALUE5) VALUE5"
输出:
FUNC1(VALUE1) VALUE1
VALUE2
FUNC2(FUNC1(VALUE3)) VALUE3
VALUE4
FUNC3(VALUE5) VALUE5
我的代码:
my $in = "FUNC1(VALUE1) VALUE1, VALUE2, FUNC2(FUNC1(VALUE3)) VALUE3, VALUE4, FUNC3(VALUE5) VALUE5";
my @cols = ($in =~ /((?&full_m)),?
(?(DEFINE)
(?<full_m>(?&full_f)|(?&word))
(?<full_f>(?&func)\s(?&word))
(?<func>(?&word)\((?&worf)\))
(?<worf>(?&func)|(?&word))
(?<word>\s*\w+\s*)
)/gx);
print "$in\n";
my $count = 1;
foreach (@cols) {
print "$count: $_\n";
++$count;
}
问题是我得到了匹配项,但之后还有 5 个空匹配项。
1: FUNC1(VALUE1) VALUE1
2:
3:
4:
5:
6:
7: VALUE2
8:
9:
10:
11:
12:
13: FUNC2(FUNC1(VALUE3)) VALUE3
14:
15:
16:
17:
18:
19: VALUE4
20:
21:
22:
23:
24:
25: FUNC3(VALUE5) VALUE5
26:
27:
28:
29:
30:
【问题讨论】:
-
您的意思是在其中使用
worf而不是word? -
@cols中的结果包含整个匹配项,还包含您在模式中定义的每个组的内容。这就是你获得 5 个空物品的原因。 -
为什么它也有组?我以为它只会显示括号内的内容?
-
(?(DEFINE)...)中的组也在括号内。 -
split /,/有什么问题?