如何将字符串中的双反斜杠组替换为*
例如:
\\\\a -> **a
\\\a -> *\a
\\a -> *a
\a -> \a
我尝试同时使用 str_replace
和 preg_replace
但在第二种情况下失败了
str_replace('\\', '*', $str);
preg_replace('/\\\\/', '*', $str);
=> `\\\a` -> `**a`
我想这样做的原因是我想要与 Split string by delimiter, but not if it is escaped 相同的东西但是
$str = '1|2\|2|3\\|4\\\|4';
$r = preg_split('~\\\\.(*SKIP)(*FAIL)|\|~s', $str);
var_dump($r);
给我。
0 => string '1' (length=1)
1 => string '2\|2' (length=4)
2 => string '3\|4\\' (length=6)
3 => string '4' (length=1)
我希望是这样的
[0] => 1
[1] => 2\|2
[2] => 3\\
[3] => 4\\\|4
PHP 5.4.45-2
最佳答案
PHP 单引号字符串中的文字反斜杠必须用 2 个反斜杠声明:要打印 1|2\|2|3\\|4\\\|4
你需要 $str = '1|2\\|2|3\\\\|4\\\\\\|4';
。
在正则表达式中,文字反斜杠可以与 4 个反斜杠匹配。
这是更新的 PHP code :
$str = '1|2\\|2|3\\\\|4\\\\\\|4';
// echo $str . PHP_EOL; => 1|2\|2|3\\|4\\\|4
$r = preg_split('~\\\\.(*SKIP)(*FAIL)|\\|~s', $str);
var_dump($r);
结果:
array(4) {
[0]=>
string(1) "1"
[1]=>
string(4) "2\|2"
[2]=>
string(3) "3\\"
[3]=>
string(6) "4\\\|4"
}
要从 \\a
获得 **a
你可以使用
$str = '\\\\a';
$r = preg_replace('~\\\\~s', '*', $str);
参见 another demo
关于php替换双反斜杠组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33475993/