【问题标题】:php replace group of double backslashphp替换双反斜杠组
【发布时间】:2016-02-02 05:46:12
【问题描述】:

如何将字符串中的双反斜杠组替换为*

例如:

\\\\a ->  **a
\\\a  ->  *\a
\\a   ->  *a
\a    ->  \a

我尝试同时使用str_replacepreg_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 regex


    【解决方案1】:

    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

    【讨论】:

    猜你喜欢
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 2011-09-06
    相关资源
    最近更新 更多