【发布时间】:2012-09-13 11:55:38
【问题描述】:
我有大量包含匹配大括号的行的文件。我确实不关心括号是否匹配。
我想检查是否有任何大括号嵌套,方法是检查左括号之后哪个先出现 - 一个右括号或另一个左括号。我假设所有括号都匹配,并且每行最多有一个外括号。 (即,[foo[bar]] 是有效行,[foo][bar] 不是,因为第二个括号对没有嵌套)。
我可以使用's/.*\[\([^]]*\)\].*/\1/g' 从this question 获取括号对中的所有内容,但我不确定如何重新测试抓取的字符串以进行进一步匹配。
例如,给定以下字符串:
foo [ bar, [baz] ]
我认为我会采取的步骤是:
- 从左侧遍历直到我看到一个左括号。 (如果没有找到,忽略该行)。
- 从左大括号开始进行非贪婪搜索,直到遇到
[或]。如果[,括号是嵌套的,所以返回该行。如果],
理想情况下,我想要一个 sed 或基于 unix-tool 的解决方案,但其他解决方案是可以接受的(例如 perl)。任何帮助,将不胜感激。
【问题讨论】:
-
你关心嵌套括号的级别还是直接忽略嵌套括号是否存在?
-
@gtgaxiola 我只关心至少有一个嵌套括号的行 - 我现在不关心嵌套括号的级别。