在 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 演示。
我在尝试获取等号后的参数时遇到了一些麻烦,但是参数可以包含引号中的字符串,里面有 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 演示。