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

Extract string with whitespace inside Perl Regex

我在尝试获取等号后的参数时遇到了一些麻烦,但是参数可以包含引号中的字符串,里面有 spaces 我不知道如何获取由 space 分隔的参数,包括 spaces 如果指定了引号。

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

结果应该如下

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

我还需要在结果哈希中省略引号。 我试过遵循正则表达式,但它不包含内部带有 space 的参数。

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

如果此字符串在引号中

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

这看起来像是 Text::ParseWords 的工作。您可以为分隔符(space 和等号 [ =])提供一个正则表达式,它会拆分您的字符串,同时尊重引用的字符串。它还将允许转义引号。

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 ]+

只需使用它并获取 matches.See 演示。

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