反斜杠preg_split

Pav*_* S. 3 php regex escaping backslash preg-split

在我的PHP代码中,我在字符串中分配了名称空间的类名,例如:

$my_class_name; // = "Aaa\Bbb\Ccc"; // this is not in source code, just var dump
Run Code Online (Sandbox Code Playgroud)

在我的情况下,我只需要中间名,'Bbb'.我试着用这个:

$result_array = preg_split("/\\/", $my_class_name);
Run Code Online (Sandbox Code Playgroud)

但是,它不起作用.我需要在正则表达式中使用tripple反斜杠"/\\\/"才能使其正常工作.我的问题是:为什么我需要三个呢?我总是通过加倍来逃避反斜杠特殊功能.

Jon*_*Jon 12

你想在你的正则表达式中有一个字面反斜杠,所以你必须逃避它.但是,那么你也想要把它一个PHP内部字符串,这意味着你必须再次逃脱它.

序列\\\/被分解为

  • \\(一个字面反斜杠字符)和
  • \/(反斜杠后跟斜杠;根据PHP字符串转义规则,这不是有效的转义序列,因此被识别为对或字符文字\/)

四个反斜杠也会被转换为两个反斜杠字符,因此将模式指定为字符串文字"/\\\\/"等同于将其指定为"/\\\/".

但你为什么用preg_split而不是explode('\\', $my_class_name)