加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – 如何在Perl中的匹配大括号之间提取字符串?

发布时间:2020-12-13 22:55:27 所属栏目:百科 来源:网络整理
导读:我的输入文件如下: HEADER {ABC|*|DEF {GHI 0 1 0} {{Points {}}}}{ABC|*|DEF {GHI 0 2 0} {{Points {}}}}{ABC|*|XYZ:abc:def {GHI 0 22 0} {{Points {{F1 1.1} {F2 1.2} {F3 1.3} {F4 1.4}}}}}{ABC|*|XYZ:ghi:jkl {JKL 0 372 0} {{Points {}}}}{ABC|*|XYZ:
我的输入文件如下:
HEADER 
{ABC|*|DEF {GHI 0 1 0} {{Points {}}}}

{ABC|*|DEF {GHI 0 2 0} {{Points {}}}}

{ABC|*|XYZ:abc:def {GHI 0 22 0} {{Points {{F1 1.1} {F2 1.2} {F3 1.3} {F4 1.4}}}}}

{ABC|*|XYZ:ghi:jkl {JKL 0 372 0} {{Points {}}}}

{ABC|*|XYZ:mno:pqr {GHI 0 34 0} {{Points {}}}}

{
    ABC|*|XYZ:abc:pqr {GHI 0 68 0}
        {{Points {{F1 11.11} {F2 12.10} {F3 14.11} {F4 16.23}}}}
        }
TRAILER

我想将文件解压缩成一个数组,如下所示:

$array[0] = "{ABC|*|DEF {GHI 0 1 0} {{Points {}}}}"

$array[1] = "{ABC|*|DEF {GHI 0 2 0} {{Points {}}}}"

$array[2] = "{ABC|*|XYZ:abc:def {GHI 0 22 0} {{Points {{F1 1.1} {F2 1.2} {F3 1.3} {F4 1.4}}}}}"

..
..

$array[5] = "{
    ABC|*|XYZ:abc:pqr {GHI 0 68 0}
        {{Points {{F1 11.11} {F2 12.10} {F3 14.11} {F4 16.23}}}}
        }"

这意味着,我需要将第一个开放的大括号与其关闭的大括号匹配,并提取其间的字符串.

我已经检查了下面的链接,但这不适用于我的问题.
Regex to get string between curly braces “{I want what’s between the curly braces}”

我正在尝试,但如果有人可以帮助我的专业知识,真的会有帮助

谢谢
斯里兰卡

至少在现代版本的Perl中,这可以用正则表达式来完成:
my @array = $str =~ /( { (?: [^{}]* | (?0) )* } )/xg;

print join "n" => @array;

正则表达式匹配包含非卷曲大括号字符的卷曲括号块或自身的递归(匹配嵌套括号)

编辑:上述代码在Perl 5.10中工作,对于早期版本,递归有点冗长:

my $re; $re = qr/ { (?: [^{}]* | (??{$re}) )* } /x;

my @array = $str =~ /$re/xg;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读