Php 按反斜杠拆分的preg_
在我的PHP代码中,我在字符串中指定了带有名称空间的类名,例如: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“/\\\\/”中使用三个反斜杠才能使其正常工作。我的问题是:为什么我需要三个?我总
$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
)