我正在将字符串与正则表达式进行比较。如果字符串不匹配,我想知道匹配在字符串中停止的位置
例如,如果我将我的字符串(aaa)与正则表达式(aab)进行比较,而不是我想知道匹配停止的字符。这里是第二个。
我尝试了以下代码,但我猜变量$ + [0]仅在字符串匹配时才有效。
if($str!~/$reg/){
print $+[0]
}
此处变量为空。那么有可能在perl中做我想要的吗?
答案 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";
当然,这可以简化,但你明白了。