首页 文章

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

提问于
浏览
1

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

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

来自Str documentation

val string_partial_match:regexp - > string - > int - > bool与Str.string_match类似,但如果参数字符串是匹配的字符串的前缀,则返回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 回答

  • 1

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

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

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

相关问题