2015-10-25 46 views
0
DEP|DEP|DEP|DEP|DEP|DEP|DEP|DEP|FIN{-1|0|-1|14|67|0|0}|IT[{"BON"|1|0}|{"RIG"|55152|99|39|0}]|DEP|ADM[{001|14|60|60|0|0|2|0|1|0|0}|{100|144178|60|7|0|0|2|0|50|0|0}]|DEP} 

我如何可以提取以下字符串中提取字符串的一部分采用严格的模式匹配

IT[{"BON"|1|0}|{"RIG"|55152|99|39|0}] 

我正则表达式(.)IT\\[\\{(.*?)\\}\\]返回完整的字符串

IT[{"BON"|1|0}|{"RIG"|55152|99|39|0}]|DEP|ADM[{001|14|60|60|0|0|2|0|1|0|0}|{100|144178|60|7|0|0|2|0|50|0|0}] 
+1

https://regex101.com/r/gT6vU5/13 ?????????/ – vks

+0

你的正则表达式_should_完整的字符串相匹配。使用正则表达式101网站进行调试。 –

+0

但我在Linux中使用的Perl不返回最短匹配,我得到完整的匹配。 – yuvi

回答

1

正如蒂姆Biegeleisen正则表达式建议应该匹配整行 - 这就是为什么“。*”匹配模式前后的所有内容。

my $line ='DEP|DEP|DEP|DEP|DEP|DEP|DEP|DEP|FIN{-1|0|-1|14|67|0|0}|IT[{"BON"|1|0}|{"RIG"|55152|99|39|0}]|DEP|ADM[{001|14|60|60|0|0|2|0|1|0|0}|{100|144178|60|7|0|0|2|0|50|0|0}]|DEP}'; 
$line =~ s/.*(IT\[.*?}\]).*/$1/g;