2014-02-07 20 views
0

我想修改一個字符串併除去所有英文字母(a-z,A-Z)。請注意,空白區域也應該刪除。全部替換爲字母 - 解釋

這篇文章提供了兩個答案Remove everything except letters from PHP string

$new_string = preg_replace('/\PL/u', '', $old_string) 

$new_string = preg_replace('/[^a-z]/i','',$old_string); 

我理解的第二個答案,但不是第一個。第一票得票最高。

第一個更好的答案是?請解釋它在做什麼。

+1

如果目標是隻保留英文字母,最好的答案是第二個。然而,如果你添加一個量詞,這個答案可能會更好:'/ [^ a-z] +/i' –

+0

@CasimiretHippolyte。是什麼讓量詞更好? – user1032531

+1

因爲您一次替換幾個連續的字符。 –

回答

1

這意味着特殊unicode字符類限定符。在這種特殊情況下,L表示「字母」。在PHP中,\P{xx}可用,所以這就是爲什麼/\PL/u將工作。

注意,那L包括以下特性:LlLmLoLtLu(檢查documentation完整列表)。這意味着,L將包括:

  • 小寫字母(Ll
  • 修飾字母(Lm
  • 其他字母(Lo
  • 標題寫字母(Lt
  • 大寫字母(Lu

即表示\PL符合要求「所有除字母外」更好,但它會保留諸如法文字母(因爲Lm),而[a-zA-Z](與/[a-z]/i相同)會更嚴格,並且只留下組中指定的字母。

而且,當然,\P{xx}僅在unicode方面有意義,因此 - /u修飾符在此處是強制性的。