我希望我的问题还没有被其他人提出,因为我试图查看网站上的几乎所有地方,但我无法找到答案。
我的问题是:我正在制作一个 PERL 脚本,它必须检测每一次出现 of one or字符串中的另一个模式。
例如:
$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";
Prints:
C:\Old_Data\perlp>perl t9.pl
beta
alpha
beta
beta
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)