我希望我的问题还没有被其他人提出,因为我试图在网站的任何地方看到但我无法找到答案.
我的问题是:我正在创建一个PERL脚本,它必须检测字符串中每个模式的每个位置的位置.
例如:
$string = "betaalphabetabeta"; $pattern = "beta|alpha";
在这种情况下,我希望我的脚本返回4个匹配项.
我认为这可以通过使用匹配运算符轻松实现,如下所示:
$string =~ /beta|alpha/g;
但是,由于我的两个模式(“alpha”,“beta”)部分重叠,我刚刚发布的代码片段在与第二个模式重叠时跳过第一个模式的任何出现.
例如.如果我有这样的字符串:
$string = "betalphabetabeta";
它只返回3个匹配而不是4个.
我试图用?=运算符做一些事情,但我无法以正确的方式将它与OR运算符联系起来……
有没有人有任何解决方案?谢谢你的帮助!
以下使用零宽度断言(我相信这就是所谓的).
原文链接:https://www.f2er.com/regex/356712.html#!/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