regex - 如何验证用户输入中的 Perl 正则表达式?

我从假定有效的 perl 正则表达式值的用户那里得到了一个输入列表。 示例可能是:

  • \b[Bb]anana\b
  • \s*Apples[BANANA]\s+

是否有安全的方法来验证这些字符串?

最佳答案

首先,考虑您想让用户使用某种模式的程度。 Perl 正则表达式可以运行任意代码。

但是,要验证您可以将字符串用作模式而不导致 fatal error ,您可以使用 qr// 运算符编译字符串并返回正则表达式。如果出现问题,qr 会给您一个 fatal error ,您可以使用 eval 捕获该错误:

my $pattern = eval { qr/$input/ };

如果返回 undef,则模式无效。而且,尽管问题中有评论,但有无数种方法可以制作无效模式。我知道,因为我一直都在手动输入它们,而且我没有用尽各种方法来搞砸 :)

这不会将模式应用于字符串,但您可以使用 $pattern 进行匹配:

if( $pattern ) {
    $target =~ $pattern;  # or $target =~ m/$pattern/
    }

https://stackoverflow.com/questions/69890532/

相关文章:

android - 找不到实现(房间)

list - 如何更新 Haskell 中的列表元素

javascript - 从数组中创建 N 位随机单词

javascript - 遍历对象数组并获得新的对象数组

r - 如何编写一个 apply() 函数来将矩阵列中的每个元素限制为最大允许值?

python - 如何使用 while 循环摆脱空字符串? (Python)

python - 如何在 python 中删除表的某些行?

javascript - discord.js 禁用 “interaction failed”

arrays - 为什么文本行数组看起来有一个额外的容器级别?

c++ - 如何直接从输入流中向集合中插入值?