2010-07-09 130 views
1

考慮片段:PHP正則表達式查詢

var_dump(preg_split("/./", "A.B.C")); // split on anything as the dot has not been escaped 

產生的輸出:

array(6) { 
    [0]=> 
    string(0) "" 
    [1]=> 
    string(0) "" 
    [2]=> 
    string(0) "" 
    [3]=> 
    string(0) "" 
    [4]=> 
    string(0) "" 
    [5]=> 
    string(0) "" 
} 

誰能請解釋它是如何工作的?另外我在輸出中看不到A,B或C!爲什麼?

+1

如果您不需要正則表達式的功能,請不要使用它們。在你的情況下,你可以用'explode'代替。 – Gumbo 2010-07-09 07:38:03

+0

@Gumbo:我想知道爲什麼我會得到6個空字符串。 – Zacky112 2010-07-09 07:39:48

回答

2

preg_split將在匹配給定正則表達式的所有匹配項處拆分輸入字符串並刪除匹配項。在你的情況下,.匹配任何字符(換行符除外)。所以你的輸入字符串A.B.C將在每個字符處被分割,給你六個部分,其中每個部分是空字符串。

如果你想有比賽就可以出結果的一部分,您可以使用環視斷言或設置PREG_SPLIT_DELIM_CAPTURE(取決於你想有結果)。

-1

你所尋找的是

var_dump(preg_split("/\./", "A.B.C")); 

「」是正則表達式的特殊字符,意思是「匹配任何東西」。因此,它必須逃脫。

2

點是正則表達式中的一個特殊字符。改爲使用。

你沒有在結果中看到A,B和C,因爲你在分裂它們。你得到的只是字母之間的空白空間。

1

的點(.)是正則表達式的特殊字符,你需要逃避的是,你正在尋找:

var_dump(preg_split("/\./", "A.B.C")); 

結果:

array(3) { 
    [0]=> 
    string(1) "A" 
    [1]=> 
    string(1) "B" 
    [2]=> 
    string(1) "C" 
} 

更新:

你的正則表達式被任何字符分裂,所以它被所有五個字符分裂0包含該點的,因此您檢索空值。

+1

OP想知道爲什麼返回的內容是空的,並清楚地表明'.'作爲問題中特殊字符的知識。 – 2010-07-09 07:46:34

+0

@Mark:你說得對,更新了。 – Sarfraz 2010-07-09 07:49:11

4

注意到preg_split沒有返回分隔符。所以,當然你沒有得到任何東西,因爲你正在分裂任何分隔符。相反,您會看到字符之間有6個空字符串。