如何使用Perl中的模式匹配获取类似标签的多个值?

时间:2013-01-09 04:32:17

标签: regex perl

例如,

说字符串是“-u xyz -p 1234 -z ask -p secure -o all -p demo”

我希望匹配所有出现的-p并获取它的值,

我尝试了,但它只在第一场比赛中停止,

$command =~ /(.*)\-p\s+(.*?)\s+(.*)/g;
print $2

将导致

1234

任何想法,我如何重复它并获得所有值:1234,安全,演示

2 个答案:

答案 0 :(得分:1)

看起来您正在尝试解析命令行选项。如果是这样,请使用Perl附带的标准Getopt :: Long模块。

http://perldoc.perl.org/Getopt/Long.html

无需重新发明轮子。

答案 1 :(得分:0)

这适用于示例:

$command = "-u xyz -p 1234 -z ask -p secure -o all -p demo";

while($command =~ /\-p ([^ ]+)/g) {
  print "$1\n";
}

结果:

1234
secure
demo