Regex 在Perl正则表达式中提取带空格的字符串

Regex 在Perl正则表达式中提取带空格的字符串,regex,string,perl,extract,Regex,String,Perl,Extract,我在尝试获取等号后的参数时遇到了一些问题,但参数可以在引号中包含字符串,并在引号中包含空格。如果指定了引号,我无法确定如何获取由空格分隔的参数(包括空格) name=MyName lastname='John Black' fathername='Bill Gen' age=30 结果应该如下 %result = ( 'name' = > 'MyName', 'lastname' => 'John Black',

我在尝试获取等号后的参数时遇到了一些问题,但参数可以在引号中包含字符串,并在引号中包含空格。如果指定了引号,我无法确定如何获取由空格分隔的参数(包括空格)

name=MyName lastname='John Black' fathername='Bill Gen' age=30 
结果应该如下

         %result = ( 'name' = > 'MyName',
                     'lastname' => 'John Black',
                      'fathername' => 'Bill Gen',
                      'age' => 30);
我还需要在结果散列中省略引号。 我尝试过遵循正则表达式,但它不包括内部有空格的参数

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

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

这看起来可能是一个任务。您可以为它提供一个分隔符正则表达式(空格和equalsign
[=]
),它将分割您的字符串,同时考虑带引号的字符串。它还允许转义引号

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'
        };
=['"]*\K[a-zA-Z0-9 ]+