我从用户那里得到了一个假设有效的 perl 正则表达式值的输入列表。例子可以是:
\b[Bb]anana\b\s*Apples[BANANA]\s+有没有一种安全的方法来验证这些字符串?
首先,考虑您想让用户使用模式做多少事情。Perl 正则表达式可以运行任意代码。
但是,为了验证您是否可以使用字符串作为模式而不导致致命错误,您可以使用运算符qr//来编译字符串并返回正则表达式。如果出现问题,则会qr出现致命错误,您可以使用以下命令捕获该错误eval:
my $pattern = eval { qr/$input/ };
Run Code Online (Sandbox Code Playgroud)
如果您返回undef,则该模式无效。而且,尽管问题中有评论,但仍有无数种方法可以制作无效模式。我知道,因为我一直用手输入它们,而且我还没有用尽方法来搞砸:)
这不会将模式应用于字符串,但您可以使用它$pattern来进行匹配:
if( $pattern ) {
$target =~ $pattern; # or $target =~ m/$pattern/
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
725 次 |
| 最近记录: |