我正在编写一个简单的正则表达式,需要接收一对坐标和/或地图名称。
例如:
例如:
move 10 15 # should returns [[10, 15]]
move 10 15 map # should returns [[10, 15, 'map']]
move map # should returns [['map']]
move 10 15 mapA mapB # should returns [[10, 15, 'mapA'], ['mapB']]
move 10 15 mapA mapB 33 44 # should returns [[10, 15, 'mapA'], ['mapB'], [33, 44]]
move 10 15 mapA 33 44 mapB # should returns [[10, 15, 'mapA'], [33, 44, 'mapB']]
然后,我写了这个正则表达式:
/
(?(DEFINE)
(?<coord> (?<x>\d+)\s+(?<y>\d+) )
(?<map> (?<mapname>[a-zA-Z]+) )
(?<commands> \s* (?: (?&coord) | (?&map) ) \s* (?&commands)? )
)
move\s+(?&commands)
/six
但是我该如何使用Perl获取groups x
,y
和map
的值呢?
我尝试了一些方法:
use strict;
use warnings;
my $command = 'move 10 15';
$command =~ /
(?(DEFINE)
(?<coord> (?<x>\d+)\s+(?<y>\d+) )
(?<map> (?<mapname>[a-zA-Z]+) )
(?<commands> \s* (?: (?&coord) | (?&map) ) \s* (?&commands)? )
)
move\s+(?&commands)
/six;
while (my ($k,$v) = each %+) { print "$k $v\n" }
print "$+{x}";
%+
没有返回任何东西。 - macabeusmap
重命名为mapname
。但是我仍然遇到了同样的问题。 - macabeus