在Perl Regex中提取带有空格的字符串

时间:2015-03-12 00:09:00

标签: regex string perl extract

我有一些麻烦试图在等号后得到参数,但是参数可以包含带有空格的引号中的字符串我无法弄清楚如果指定了引号,如何获取由空格分隔的参数,包括空格。

name=MyName lastname='John Black' fathername='Bill Gen' age=30 

结果应该是

         %result = ( 'name' = > 'MyName',
                     'lastname' => 'John Black',
                      'fathername' => 'Bill Gen',
                      'age' => 30);

另外,我需要在结果哈希中省略引号。 我试过跟随正则表达式,但它不包含带有空格的参数。

((?:\w+=)([^\s]+)\s)+

如果此字符串在引号

中,如何正确构建正则表达式以在字符串中包含空格

2 个答案:

答案 0 :(得分:2)

这似乎可能是Text::ParseWords的工作。您可以为分隔符(空格和等号[ =])提供正则表达式,它将分割您的字符串,同时尊重引用的字符串。它还允许转义报价。

use strict;
use warnings;
use Data::Dumper;
use Text::ParseWords;

while (<DATA>) {
    chomp;
    my %data = quotewords('[ =]', 0, $_);
    print Dumper \%data;
}

__DATA__
name=MyName lastname='John Black' fathername='Bill Gen' age=30

<强>输出:

$VAR1 = {
          'name' => 'MyName',
          'lastname' => 'John Black',
          'age' => '30',
          'fathername' => 'Bill Gen'
        };

答案 1 :(得分:0)

=['"]*\K[a-zA-Z0-9 ]+

只需使用此功能即可获得匹配。请参阅演示。

https://regex101.com/r/iS6jF6/8