我需要采取以下字符串并打破它成大块单个字符串查找多个子:在使用Perl
[ToNode =杯订户] [原因=临界服务是 向下] [FROMNODE =杯子出版商] [AppID =思科UP服务器恢复管理器]
每个块被封装在括号中。我期待在Perl中这样做,并且正在寻找一种方法的方向。
谢谢!
我需要采取以下字符串并打破它成大块单个字符串查找多个子:在使用Perl
[ToNode =杯订户] [原因=临界服务是 向下] [FROMNODE =杯子出版商] [AppID =思科UP服务器恢复管理器]
每个块被封装在括号中。我期待在Perl中这样做,并且正在寻找一种方法的方向。
谢谢!
可以在]
和[
之间的点拆分使用先行和回顾后声明:
$str = '[ToNode=cup-subscriber][Reason=Critical service is down]
[FromNode=cup-publisher][AppID=Cisco UP Server Recovery Manager]';
@pieces = split/(?<=\])(?=\[)/,$str;
这是我用过的。谢谢! –
对正则表达式使用/ g修饰符。无论是在列表环境提取到一个数组:
$data = "[ToNode=cup-subscriber][Reason=Critical service is down][FromNode=cup-publisher][AppID=Cisco UP Server Recovery Manager]"
my @chunk = ($data =~ /\[(.*?)\]/g);
或在while循环遍历组块:
$data = "[ToNode=cup-subscriber][Reason=Critical service is down][FromNode=cup-publisher][AppID=Cisco UP Server Recovery Manager]"
while ($data =~ /\[(.*?)\]/g) {
process($1);
}
试试这个:
my $str = '[ToNode=cup-subscriber][Reason=Critical service is down][FromNode=cup-publisher][AppID=Cisco UP Server Recovery Manager]';
my %fields = $str =~ m{\[([^][=]+)=([^][=]+)\]}g;
say "$_: $fields{$_}" for sort keys %fields;
或者更冗长:
my $str = '[ToNode=cup-subscriber][Reason=Critical service is down][FromNode=cup-publisher][AppID=Cisco UP Server Recovery Manager]';
# Capture all occurrences of ...
my %fields = $str =~ m{
\[ # Open bracket
([^][=]+) # Sequence of 1 or more non ][= characters
= # Equals
([^][=]+) # Sequence of 1 or more non ][= characters
\] # Close bracket
}xg;
# Dump contents of %fields
say "$_: $fields{$_}" for sort keys %fields;
'@chunks =分流/(:\] | ^?)(?:\ [| $)/,$ string'为一个相当快速和肮脏的解 – amon