私はperlで文字列を解析し、その配列を配列に入れようとしています。Perlの正規表現に複数の空白行があります
Ex。 "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:
を必要とされているがあなたの代わりにそこにある 'word'の' worf'を持つことを意味していましたか? – Amber
'@ cols'の結果は、完全一致を含みますが、あなたのパターンで定義した各グループの内容も含みます。だからあなたは5つの空のアイテムを手に入れます。 –
なぜそれもグループを持っていますか?私はそれが括弧の中に何が表示されるだけだろうと思ったのですか? – perlnoob