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偶尔会添加要转义的新字符)。
答案 0 :(得分:2)
您可以撤消不需要的转义符。
$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, '\\*', '/');
我将定界符参数移到末尾,因此它是可选的。