正则表达式 – 使用Perl匹配两个重叠模式

我希望我的问题还没有被其他人提出,因为我试图在网站的任何地方看到但我无法找到答案.

我的问题是:我正在创建一个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

相关文章

jquery.validate使用攻略(表单校验) 目录 jquery.validate...
/\s+/g和/\s/g的区别 正则表达式/\s+/g...
自整理几个jquery.Validate验证正则: 1. 只能输入数字和字母...
this.optional(element)的用法 this.optional(element)是jqu...
jQuery.validate 表单动态验证 实际上jQuery.validate提供了...
自定义验证之这能输入数字(包括小数 负数 ) <script ...