[英]preg_split by backslash
在我的PHP代碼中,我在字符串中分配了名稱空間的類名,例如:
$my_class_name; // = "Aaa\Bbb\Ccc"; // this is not in source code, just var dump
在我的情況下,我只需要中間名,'Bbb'。 我試着用這個:
$result_array = preg_split("/\\/", $my_class_name);
但是,它不起作用。 我需要在正則表達式"/\\\\\\/"
使用tripple反斜杠才能使其正常工作。 我的問題是:為什么我需要三個呢? 我總是通過加倍來逃避反斜杠特殊功能。
你想在你的正則表達式中有一個字面反斜杠,所以你必須逃避它。 但你也希望把它里面的PHP 字符串 ,這意味着你必須再次逃脫它。
序列\\\\\\/
被分解成
\\\\
( 一個字面反斜杠字符)和 \\/
(反斜杠后跟斜杠;根據PHP字符串轉義規則,這不是有效的轉義序列,因此被識別為對或字符文字\\/
) 四個反斜杠也會被轉換為兩個反斜杠字符,因此將模式指定為字符串文字"/\\\\\\\\/"
等同於將其指定為"/\\\\\\/"
。
但是你為什么使用preg_split
而不是explode('\\\\', $my_class_name)
?
它有點奇怪,但你必須逃避逃脫,因為正則表達式被解析兩次...
嘗試:
$result_array = preg_split("/\\\\/", $my_class_name);
$str = "aa\\bb\\cc";
print_r(preg_split("/\\\\/", $str));
輸出:
Array
(
[0] => aa
[1] => bb
[2] => cc
)
我認為這是因為你需要為字符串轉義一次,為正則表達式引擎轉義一次
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.