在perl中查找由regex匹配的字符数

时间:2013-12-22 06:57:13

标签: regex perl

我正在将字符串与正则表达式进行比较。如果字符串不匹配,我想知道匹配在字符串中停止的位置

例如,如果我将我的字符串(aaa)与正则表达式(aab)进行比较,而不是我想知道匹配停止的字符。这里是第二个。

我尝试了以下代码,但我猜变量$ + [0]仅在字符串匹配时才有效。

if($str!~/$reg/){
  print $+[0]
}

此处变量为空。那么有可能在perl中做我想要的吗?

2 个答案:

答案 0 :(得分:1)

也许以下内容会有所帮助:

use strict;
use warnings;

my $string1 = 'aaaa';
my $string2 = 'aaba';
( $string1 ^ $string2 ) =~ /[^\x00]/;
print $+[0] if $+[0];

输出:

3

字符串'XOR的结果在每个匹配位置是\x00。正则表达式匹配缺少该值,因此是不匹配的字符对。在上面的例子中,两个字符串匹配,直到它们的第三个字符。

希望这有帮助!

答案 1 :(得分:0)

我不认为否定匹配可以告诉你字符串的哪一部分帮助它“成功不匹配”而不深入重新引擎。一个更简单的解决方案是尝试实际匹配并显示失败的位置。

假设您想要从左到右匹配(如您的示例所示),请尝试以下操作:

until($str =~ /$reg/) {
   $fail = substr $reg,-1; 
   $reg  = substr $reg,0,-1;
}
print "$reg\t$fail\n";

当然,这可以简化,但你明白了。