簡體   English   中英

反斜杠preg_split

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM