首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式以检查括号是否嵌套。

问正则表达式以检查括号是否嵌套。
EN

Stack Overflow用户
提问于 2012-09-21 04:06:46
回答 2查看 386关注 0票数 2

我有大量的文件,其中包含与大括号相匹配的行。我不在乎括号是否相配。

我想检查是否有任何大括号是嵌套的,检查哪个是在一个开始的括号之后-一个结束或另一个开口括号。我假设所有括号都匹配,每行最多有一个外括号。(即,[foo[bar]]是一个有效行,而[foo][bar]不是,因为第二个括号对不是嵌套的)。

我可以使用this question使用's/.*\[\([^]]*\)\].*/\1/g'从一个括号对中获取所有内容,但我不确定如何重新测试抓取的字符串,以便进行进一步的匹配。

例如,给定以下字符串:

代码语言:javascript
复制
foo [ bar, [baz] ]

我认为我要采取的步骤是:

  1. 从左边穿过,直到我看到一个开口托架。(如果没有找到,请忽略行)。
  2. 不贪婪地从开口大括号中搜索,直到遇到[或]为止。如果是[,括号是嵌套的,所以返回行。如果],

理想情况下,我希望使用基于sed或unix工具的解决方案,但其他解决方案是可以接受的(例如,perl)。任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-21 06:04:10

代码语言:javascript
复制
perl -ne 'print if /\[[^\]]*\[/' your_file

测试如下:

代码语言:javascript
复制
> cat temp
foo [ bar, [baz] ]
foo [ bar, baz ]
foo [ bar ]
foo [ bar, baz] ]
foo  bar, [baz] ]
> perl -ne 'print if /\[.*\[/' temp
foo [ bar, [baz] ]
> 
票数 0
EN

Stack Overflow用户

发布于 2012-09-21 04:40:00

使用递归regexp检查括号匹配,并且它们是嵌套的。在没有语法检查的情况下检查嵌套是没有意义的,因为这会产生检查结果。例如:

代码语言:javascript
复制
my $regex = qr/\[([^\[\]]+?|(??{$regex}))*\]/;
if( $line =~ /^[^\[\]]*\[$regex\][^\[\]]*$/ ) #Valid

​

​

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12524104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档