我需要编写一个与preg_quote函数完全相反的函数。简单地删除所有'\'都不起作用,因为字符串中可能有'\'。
实施例
inverse_preg_quote('an\\y s\.tri\*ng') //this should return "an\y s.tri*ng"
或者你可以测试为
inverse_preg_quote(preg_quote($string)) //$string shouldn't change
答案 0 :(得分:5)
您正在寻找striplashes
<?php
$str = "Is your name O\'reilly?";
// Outputs: Is your name O'reilly?
echo stripslashes($str);
?>
有关详细信息,请参阅http://php.net/manual/en/function.stripslashes.php。 (还有一些你想要研究的多功能http://www.php.net/manual/en/function.addcslashes.php和http://www.php.net/manual/en/function.stripcslashes.php
编辑:否则,您可以执行三次str_replace调用。第一个用例如替换\\ $ DOUBLESLASH,然后将\替换为“”(空字符串),然后将$ DOUBLESLASH设置回\。
$str = str_replace("\\", "$DOUBLESLASH", $str);
$str = str_replace("\", "", $str);
$str = str_replace("$DOUBLESLASH", "\", $str);
有关详细信息,请参阅http://php.net/manual/en/function.str-replace.php。
答案 1 :(得分:3)
来自manual:
特殊的正则表达式字符是:。 \ + *? [^] $(){} =! &LT; &GT; | : -
您可以编写一个函数来替换\
,然后将上述每个字符替换为字符本身。应该很容易:
function inverse_preg_quote($str)
{
return strtr($str, array(
'\\.' => '.',
'\\\\' => '\\',
'\\+' => '+',
'\\*' => '*',
'\\?' => '?',
'\\[' => '[',
'\\^' => '^',
'\\]' => ']',
'\\$' => '$',
'\\(' => '(',
'\\)' => ')',
'\\{' => '{',
'\\}' => '}',
'\\=' => '=',
'\\!' => '!',
'\\<' => '<',
'\\>' => '>',
'\\|' => '|',
'\\:' => ':',
'\\-' => '-'
));
}
$string1 = '<title>Hello (World)?</title>';
$string2 = inverse_preg_quote(preg_quote($string1));
echo $string1 === $string2;
答案 2 :(得分:-1)
您可以使用专用的T-Regx library:
Pattern::unquote('an\\y s\.tri\*ng'); // 'any s.tri*ng'
它也是100%可传递的,所以
$input = 'an\\y s\.tri\*ng';
$output = Pattern::unquote(Pattern::quote($input);
$input === $output; // always true