Php 按反斜杠拆分的preg_

Php 按反斜杠拆分的preg_,php,regex,escaping,backslash,preg-split,Php,Regex,Escaping,Backslash,Preg Split,在我的PHP代码中,我在字符串中指定了带有名称空间的类名,例如: $my_class_name; // = "Aaa\Bbb\Ccc"; // this is not in source code, just var dump 我只需要中间名“Bbb”。我试着用这个: $result_array = preg_split("/\\/", $my_class_name); 但是,它不起作用。我需要在regexp“/\\\\/”中使用三个反斜杠才能使其正常工作。我的问题是:为什么我需要三个?我总

在我的PHP代码中,我在字符串中指定了带有名称空间的类名,例如:

$my_class_name; // = "Aaa\Bbb\Ccc"; // this is not in source code, just var dump
我只需要中间名“Bbb”。我试着用这个:

$result_array = preg_split("/\\/", $my_class_name);

但是,它不起作用。我需要在regexp
“/\\\\/”
中使用三个反斜杠才能使其正常工作。我的问题是:为什么我需要三个?我总是通过将反斜杠特殊函数加倍来对其进行转义。

您希望在正则表达式中有一个文字反斜杠,因此必须对其进行转义。但是,您还需要将其放入PHP中,这意味着您必须再次对其进行转义

序列
\\\/
被分解为

  • \\
    (一个文字反斜杠字符)和
  • \/
    (反斜杠后跟斜杠;根据PHP字符串转义规则,这不是有效的转义序列,因此被识别为成对或字符文本
    \/
四个反斜杠也将被转换为两个反斜杠字符,因此将模式指定为字符串文字
“/\\\\\/”
,相当于将其指定为
“/\\\/”


但是为什么要使用
preg\u split
而不是
explode(“\\”,$my\u class\u name)

我认为这是因为字符串需要转义一次,正则表达式引擎需要转义一次这有点奇怪,但在正则表达式被解析两次时必须转义

尝试:

产出:

Array
(
    [0] => aa
    [1] => bb
    [2] => cc
)

谢谢,现在有道理了。再次感谢您的提示,explode在这里就足够了。对于我的其他次天才,他说如果您要使用
preg\u split
,答案是
/\\\\/
。对于我的c#dev同事来说,如果您正在寻找
split
explode
是php的等价物。
$str = "aa\\bb\\cc";
print_r(preg_split("/\\\\/", $str));
Array
(
    [0] => aa
    [1] => bb
    [2] => cc
)