gpt4 book ai didi

linux - 检查括号是否嵌套的正则表达式

转载 作者:太空狗 更新时间:2023-10-29 12:20:02 26 4
gpt4 key购买 nike

我有大量文件,其中包含带有匹配大括号的行。我关心括号是否匹配。

我想检查是否嵌套了任何大括号,方法是检查左括号后哪个先出现 - 右括号还是另一个左括号。我假设所有括号都匹配,并且每行最多有一个外括号。 (即,[foo[bar]] 是有效行,[foo][bar] 不是,因为第二对括号未嵌套)。

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

例如,给定以下字符串:

foo [ bar, [baz] ]

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

  1. 从左侧开始,直到我看到左括号。 (如果没有找到,忽略该行)。
  2. 从左大括号开始进行非贪婪搜索,直到遇到 []。如果[,括号是嵌套的,所以返回该行。如果]

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

最佳答案

使用递归正则表达式检查括号是否匹配以及它们是否嵌套。在没有语法检查的情况下检查嵌套是没有意义的,因为这可能会破坏检查结果。例如:

my $regex = qr/\[([^\[\]]+?|(??{$regex}))*\]/;
if( $line =~ /^[^\[\]]*\[$regex\][^\[\]]*$/ ) #Valid

Recursive regexp

关于linux - 检查括号是否嵌套的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12524104/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com