preg_quote函数允许指定要转义的附加分隔符。但是为了替换目的,还有一个替代方案,也指定分隔符不逃避?
例如,除了"/"
和"*"
之外,我希望逃避一切(包括额外的分隔符"\"
)。
有一些像:
$str = 'Replace/this line $15 #1 except \w* {';
$str = preg_quote_except($str, '/', '\*');
// Should be identical to:
$str = 'Replace\/this line \$15 \#1 except \w* \{';
更新
虽然我很感激你在被问到它之后几秒钟就把它标记为副本的努力,但它确实不是How to escape only certain characters的副本。那里的用户只想要某些角色而我想要除了一些之外的所有角色。我不想手动管理要逃避的东西(顺便说一下,记得PHP偶尔添加新的字符来逃避)。
您可以撤消不需要的转义。
$str = preg_quote($str, '/');
$str = str_replace(['\\*', '\\\\'], ['*', '\\'], $str);
这可以是一个功能:
function preg_quote_except($str, $except, $delim = NULL) {
$str = preg_quote($str, $delim);
for ($i = 0; $i < strlen($except); $i++) {
$from[] = '\\' . $except[$i];
$to[] = $except[$i];
}
return str_replace($from, $to, $str);
}
然后你会称之为:
$str = preg_quote_except($str, '\\*', '/');
我将delimiter参数移到了末尾,因此它可以是可选的。