我希望我的问题还没有被其他人提出,因为我试图在网站的任何地方看到但我无法找到答案.
我的问题是:我正在创建一个PERL脚本,它必须检测字符串中每个模式的每个位置的位置.
例如:
$string = "betaalphabetabeta"; $pattern = "beta|alpha";
在这种情况下,我希望我的脚本返回4个匹配项.
我认为这可以通过使用匹配运算符轻松实现,如下所示:
$string =~ /beta|alpha/g;
但是,由于我的两个模式(“alpha”,“beta”)部分重叠,我刚刚发布的代码片段在与第二个模式重叠时跳过第一个模式的任何出现.
例如.如果我有这样的字符串:
$string = "betalphabetabeta";
它只返回3个匹配而不是4个.
我试图用?=运算符做一些事情,但我无法以正确的方式将它与OR运算符联系起来……
有没有人有任何解决方案?谢谢你的帮助!
以下使用零宽度断言(我相信这就是所谓的).
#!/usr/bin/perl use strict; use warnings; $_ = "betalphabetabeta"; while (/(?=(alpha|beta))/g) { print $1,"\n";
打印:
C:\Old_Data\perlp>perl t9.pl beta alpha beta beta
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。