gpt4 book ai didi

regex - 如何在 Perl 中的匹配大括号之间提取字符串?

转载 作者:行者123 更新时间:2023-12-04 02:34:25 26 4
gpt4 key购买 nike

我的输入文件如下:

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;

关于regex - 如何在 Perl 中的匹配大括号之间提取字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2700613/

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