我有一个我需要解析的字符串.它符合以下要求:
我可能会看到示例字符串:
我需要构建一个这个字符串的Perl哈希.如果我能保证它是1对我会做这样的事情:
$string =~ /([A-Z][A-Z])([0-9]+)/
$key = $1
$value = $2
$hash{$key} = $value
Run Code Online (Sandbox Code Playgroud)
对于多个字符串,我可以做一些事情,在上述正则表达式的每次匹配之后,我获取原始字符串的子字符串(免除第一个匹配)然后再次搜索.但是,我确信有一种更聪明的,perl-esque方式来实现这一目标.
希望我没有这么糟糕的数据来源来处理 -
乔纳森
在具有全局标志的列表上下文中,正则表达式将返回所有匹配的子字符串:
use Data::Dumper;
@strs = (
'AB1234',
'AB1234 BC2345',
'AB1234BC2345',
'',
'AB12345601BC1234CD1232PE2343',
'AB12345601 BC1234 CD1232 PE2343'
);
for $str (@strs) {
# The money line
%parts = ($str =~ /([A-Z][A-Z])(\d+)/g);
print Dumper(\%parts);
}
Run Code Online (Sandbox Code Playgroud)
要获得更高的不透明度,请删除模式匹配周围的括号:%parts = $str =~ /([A-Z][A-Z])(\d+)/g;.