Regex 在perl中查找正则表达式匹配的字符数

Regex 在perl中查找正则表达式匹配的字符数,regex,perl,Regex,Perl,我将字符串与正则表达式进行比较。如果字符串不匹配,我想知道匹配在字符串中停止的位置 例如,如果我将字符串(aaa)与正则表达式(aab)进行比较,那么我想知道匹配停止在哪个字符上。这是第二个a 我尝试了以下代码,但我想变量$+[0]只有在字符串匹配时才起作用 if($str!~/$reg/){ print $+[0] } 这里的变量是空的。那么,是否有可能实现我在perl中所期望的功能呢?我认为负匹配无法告诉您字符串的哪一部分帮助它“成功地不匹配”,而无需深入重新引擎。一个更简单的解决方案

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

例如,如果我将字符串(aaa)与正则表达式(aab)进行比较,那么我想知道匹配停止在哪个字符上。这是第二个a

我尝试了以下代码,但我想变量$+[0]只有在字符串匹配时才起作用

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

这里的变量是空的。那么,是否有可能实现我在perl中所期望的功能呢?

我认为负匹配无法告诉您字符串的哪一部分帮助它“成功地不匹配”,而无需深入重新引擎。一个更简单的解决方案是尝试实际匹配并显示失败的地方

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

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

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

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

use strict;
use warnings;

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

3
字符串的异或结果是每个匹配位置的
\x00
。正则表达式匹配该值的缺失,因此是一个不匹配的字符对。在上面的例子中,两个字符串匹配到第三个字符


希望这有帮助

您需要提供一个实际的正则表达式示例,以获得一个很好的答案。(没有一个简单、普遍适用的答案。)您好,您可能会发现这篇文章很有用[第一个不匹配字符的位置][1][1]:这是一个优雅的解决方案。但是如果regexp使用像?、这样的运算符,它将不起作用*