我正在编写一个抽象函数,该函数将向用户提出一个给定的问题,并根据给定的正则表达式验证答案。重复该问题,直到答案与验证正则表达式匹配为止。

但是,我也希望客户端能够指定答案是否必须区分大小写。

所以像这样:

sub ask {
    my ($prompt, $validationRe, $caseSensitive) = @_;
    my $modifier = ($caseSensitive) ? "" : "i";
    my $ans;
    my $isValid;

    do {
        print $prompt;
        $ans = <>;
        chomp($ans);

        # What I want to do that doesn't work:
        # $isValid = $ans =~ /$validationRe/$modifier;

        # What I have to do:
        $isValid = ($caseSensitive) ?
            ($ans =~ /$validationRe/) :
            ($ans =~ /$validationRe/i);

    } while (!$isValid);

    return $ans;
}

结果:有没有一种方法可以动态指定正则表达式的修饰符?

最佳答案



perldoc perlre:



这给你一些类似的东西

$isValid = $ans =~ m/(?$modifier)$validationRe/;

以这种方式接受用户输入时,只需确保采取适当的安全预防措施即可。

关于regex - 如何在Perl中将变量用作正则表达式修饰符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27576498/

10-13 07:36