regex 如何在preg_quote()中排除竖线转义

xxb16uws  于 2022-12-01  发布在  其他
关注(0)|答案(1)|浏览(99)

我有一个数组,它的元素是路径,包含正斜杠和感叹号。
我需要将regex模式这样的数组注入到preg_match()

$url = 'example.com/path/to/!another';
$arr = ['path/to/!page', 'path/to/!another'];
$unescapedPattern = implode('|', $arr);
$escapedPattern = preg_quote($unescapedPattern, '/');

if(preg_match('/('.$escapedPattern.')/', $url)) {
    echo 'The input url contains one of the paths in array!';
}

当然,由于preg_quote()跳过了竖线,因此不会应用该模式
如何排除它的逃逸,或者如何用另一种方式解决问题?

rhfm7lfc

rhfm7lfc1#

您可以使用

$url = 'example.com/path/to/!another';
$arr = ['path/to/!page', 'path/to/!another'];
$escapedPattern = implode("|", array_map(function($x) {return preg_quote($x, '/');}, $arr));

if(preg_match('/('.$escapedPattern.')/', $url)) {
    echo 'The input url contains one of the paths in array!';
}

确保使用'/'作为preg_quote的第二个参数,因为您使用/作为正则表达式分隔符字符。

相关问题