gpt4 book ai didi

regex - 如何递归匹配与多字符分隔符平衡的字符串?

转载 作者:行者123 更新时间:2023-12-01 09:54:08 25 4
gpt4 key购买 nike

我如何递归地匹配一个用多字符分隔符平衡的字符串?

考虑一个 LaTeX 内联引号,在引号开始处用 2 个双勾号 (``) 标记,在引号结束处用 2 个撇号 (\x27\x27) 标记。

下面的代码给了我 ``five''。我想捕获二``三`四'``五''三四''六

my $str = q|one ``two ``three `four' ``five'' three four'' six'' seven|;

if ( $str =~ /
(
``
(?:
[^`']
|
(?1)
)*
''
)
/x
)
{
print "$1\n";
}

我想这与如何取反有关,不是字符类([^`'],而是多字符字符串。

最佳答案

(?:(?!PAT)(?s:.))*PAT,因为 [^CHAR]* 是到 CHAR,所以

(?:(?!``|'')(?s:.))*

匹配不是这两个序列开头的任何字符。但是,我认为前瞻的成本不高,所以我相信

(?: [^`']+ | `(?!`) | '(?!') )*

会更便宜。我们得到以下信息:

/
(
``
(
(?: [^`']+ | `(?!`) | '(?!') )*
(?:
(?-2)
(?: [^`']+ | `(?!`) | '(?!') )*
)*
)
''
)
/x

我们可以通过简化来降低性能。

/
(
``
(
(?: [^`']+
| `(?!`)
| '(?!')
| (?-2)
)*
)
''
)
/x

在这两个片段中,您要捕获的文本都在 $2 中。

关于regex - 如何递归匹配与多字符分隔符平衡的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32122995/

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