Perl检查字符串是否是有效正则表达式匹配的前缀

时间:2017-10-06 04:46:45

标签: regex perl

通常,是否可以确定给定字符串是否是Perl中正则表达式的任何可能匹配的前缀?

OCaml正则表达式库Str支持的一个有趣功能是string_partial_match。此函数确定从给定位置开始的字符串部分是a)匹配的前缀还是字面上匹配本身,或b)不是任何匹配字符串的前缀。

来自Str documentation

  

val string_partial_match:regexp - > string - > int - >布尔

     

类似于   Str.string_match,如果参数字符串是a,也返回true   匹配的字符串的前缀。这包括一个真实的情况   完全匹配。

我想知道Perl是否有能力模仿这个功能。 使用pos()设置位置,零宽度断言\G和正则表达式插值,我们可以模拟string_match(它没有前缀行为)。

sub string_match {
    my ($regex, $str, $pos) = @_;
    pos($str) = $pos;
    return ($str =~ m/\G$regex/);
}

Perl的正则表达式支持OCaml库不具备的许多功能,因此识别可能匹配前缀的能力完全有可能无法实现/没有被API公开。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,那么你想看看字符串是否匹配正则表达式,如果字符串更长。也就是说,是否可以以与正则表达式匹配的方式扩展字符串。在技​​术术语中:当DFA到达字符串的末尾时,它还没有失败。

我可以看到这些功能的一些用途,特别是在交互式地验证用户输入一次一个字符时。然后你想区分"输入永远不会匹配"和"如果用户输入更多字符"输入可以匹配。

据我所知,Perl不支持此类功能。