【问题标题】:How to get the multiple values of similar tags using Pattern Matching in Perl?如何使用 Perl 中的模式匹配获取相似标签的多个值?
【发布时间】:2013-01-09 04:32:16
【问题描述】:

例如,

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

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

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

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

这将导致

1234

任何想法,我怎样才能重现它并获得所有值:1234、安全、演示

【问题讨论】:

    标签: regex perl


    【解决方案1】:

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

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

    无需重新发明轮子。

    【讨论】:

    • 嗨,它不是命令行参数,而是来自平面文件的字符串,我在 perl 脚本中阅读了该文件,我需要获取特定标签的所有值...
    • 即使它不是命令行参数,我敢打赌你仍然可以使用 Getopt::Long 来完成任务。看起来这些标签应该看起来像命令参数,不是吗?
    • 是的,这是一个命令行参数,但是作为字符串来自平面文件,我们可以使用 Getopt::Long 从字符串中读取标签吗?
    【解决方案2】:

    这将适用于示例:

    $command = "-u xyz -p 1234 -z ask -p secure -o all -p demo";
    
    while($command =~ /\-p ([^ ]+)/g) {
      print "$1\n";
    }
    

    结果:

    1234
    secure
    demo
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-22
      • 1970-01-01
      • 2016-09-24
      • 2017-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-17
      相关资源
      最近更新 更多