gpt4 book ai didi

regex - Perl 未能说明 `Variable length lookbehind not implemented`

转载 作者:行者123 更新时间:2023-12-04 22:31:40 25 4
gpt4 key购买 nike

我基本上是在做一种词边界断言。我想测试是否[abc]不落后如果[abc]是领先的,反之亦然。

所以我试图对它进行测试并像这样进行否定:

#!/usr/bin/perl
($_) = "abcdef" =~
/
((?&BB).*)
|
(?!)
(?<W>[abc])
(?<NW>[^abc])
(?<BB>
(?<=(?&W))(?=(?&NW))
|(?<=(?&NW))(?=(?&W))
)
/x;
print;

哪个不起作用。但是,如果我这样做:
#!/usr/bin/perl
($_) = "abcdef" =~
/
((?&BB).*)
| (?!)
(?<W>[abc])
(?<NW>[^abc])
(?<BB>
(?<=[abc])(?=[^abc])
| (?<=[^abc])(?=[abc])
)
/x;
print;

确实如此。这里发生了什么?可变长度后视在哪里?

仅供引用,我知道消息的含义。我想知道为什么 perl 认为命名组的长度是可变的,我该如何让它停止思考?对我来说,这看起来是一个错误。还有人同意吗?

使用版本:
This is perl 5, version 14, subversion 4 (v5.14.4) built for cygwin-thread-multi
This is perl 5, version 16, subversion 2 (v5.16.2) built for i686-linux

编辑

所以我找到了一个足够的解决方法。
#!/usr/bin/perl
$chars = qr/[abc]/;
$notChars = qr[^abc]/;
($_) = "abcdef" =~
/
((?&BB).*)
| (?!)
(?<BB>
(?<=$chars)(?=$notChars)
| (?<=$notChars)(?=$chars)
)
/x;
print;

最佳答案

后视节点只是查看它的子节点,看到它包含一个命名子规则匹配,并决定一个命名子规则匹配不一定是固定长度的。它不会查看命名子规则的内部以发现它实际上确实具有固定长度,而且我不确定它是否可以给出代码的当前状态。由于无法确定固定长度,因此无法编译lookbehind。

也许该消息应该与 Can't determine the length of '(?&W)' for use in lookbehind 类似。而不是 Variable length lookbehind not implemented .

关于regex - Perl 未能说明 `Variable length lookbehind not implemented`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20104197/

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