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