通常,是否可以确定给定字符串是否是Perl中正则表达式的任何可能匹配的前缀?
OCaml正则表达式库 Str
支持的一个有趣功能是 string_partial_match
. 此函数确定从给定位置开始的字符串部分是a)匹配的前缀还是字面上匹配本身,或b)不是任何匹配字符串的前缀 .
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 回答
如果我理解正确,那么你想看看如果字符串更长,字符串是否可以匹配正则表达式 . 也就是说,是否可以以与正则表达式匹配的方式扩展字符串 . 在技术术语中:当DFA到达字符串的末尾时,它还没有失败 .
我可以看到这些功能的一些用途,特别是在交互式验证用户输入一次一个字符时 . 然后你想区分“输入永远不会匹配”,“如果用户输入更多字符,输入可以匹配” .
据我所知,Perl不支持此类功能 .