我有大量的文件,其中包含与大括号相匹配的行。我不在乎括号是否相配。
我想检查是否有任何大括号是嵌套的,检查哪个是在一个开始的括号之后-一个结束或另一个开口括号。我假设所有括号都匹配,每行最多有一个外括号。(即,[foo[bar]]是一个有效行,而[foo][bar]不是,因为第二个括号对不是嵌套的)。
我可以使用this question使用's/.*\[\([^]]*\)\].*/\1/g'从一个括号对中获取所有内容,但我不确定如何重新测试抓取的字符串,以便进行进一步的匹配。
例如,给定以下字符串:
foo [ bar, [baz] ]我认为我要采取的步骤是:
[或]为止。如果是[,括号是嵌套的,所以返回行。如果],理想情况下,我希望使用基于sed或unix工具的解决方案,但其他解决方案是可以接受的(例如,perl)。任何帮助都将不胜感激。
发布于 2012-09-21 06:04:10
perl -ne 'print if /\[[^\]]*\[/' your_file测试如下:
> cat temp
foo [ bar, [baz] ]
foo [ bar, baz ]
foo [ bar ]
foo [ bar, baz] ]
foo bar, [baz] ]
> perl -ne 'print if /\[.*\[/' temp
foo [ bar, [baz] ]
> 发布于 2012-09-21 04:40:00
使用递归regexp检查括号匹配,并且它们是嵌套的。在没有语法检查的情况下检查嵌套是没有意义的,因为这会产生检查结果。例如:
my $regex = qr/\[([^\[\]]+?|(??{$regex}))*\]/;
if( $line =~ /^[^\[\]]*\[$regex\][^\[\]]*$/ ) #Valid

https://stackoverflow.com/questions/12524104
复制相似问题