正则表达式 – Perl未能说明“可变长度后备未实现”
发布时间:2020-12-14 06:04:12 所属栏目:百科 来源:网络整理
导读:我基本上是在做一种单词边界断言.我想测试if [abc]是否落后以及[abc]是否领先,反之亦然. 所以我试着对它进行测试并做出这样的否定: #!/usr/bin/perl($_) = "abcdef" =~/((?BB).*)| (?!) (?W[abc]) (?NW[^abc]) (?BB (?=(?W))(?=(?NW)) |(?=(?NW))(?=(?W)) )
我基本上是在做一种单词边界断言.我想测试if [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节点只是查看其子节点,看到它包含一个命名的子规则匹配,并确定命名的子规则匹配不一定是固定长度.它没有查看命名子规则内部以发现它实际上确实具有固定长度,并且我不确定它是否可以给出代码的当前状态.由于它无法确定固定长度,因此无法编译后备.
也许消息应该是这样的:不能确定用于lookbehind的'(?& W)’的长度而不是未实现的可变长度lookbehind. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |