如何将字符串中的双反斜杠组替换为*
例如:
\\\\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
答案 0 :(得分:3)
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