2012-11-22 126 views
6

我想在ruby中構建一個正則表達式,以匹配UTF-8中的字母字符,如ñíóúü等。我知道/\p{Alpha}/i作品和/\p{L}/i的作品,但有什麼區別?ruby​​中/ p {Alpha}/i和/ p {L}/i有什麼區別?

+0

這很奇怪。根據[這個比較](http://www.regular-expressions.info/refflavors.html),前者不應該在Ruby中可用。 –

+0

必須是過時的,因爲我在我的rails控制檯中使用了這兩者。 –

+0

看起來它已過時。 Ruby開始在1.9中使用新的Regex引擎,IIRC,因此這些引擎可能會從那時起。 – Chowlett

回答

9

它們似乎是等價的。 (編輯:有時,看到這個答案的結尾)

看起來像Ruby從版本1.9支持\p{Alpha}。在POSIX \p{Alpha}等於\p{L&}(用於支持Unicode的正則表達式; see here)。這匹配具有大寫和小寫變體的所有字符(see here)。 UNICASE字母將不會被匹配(而他們將匹配由\p{L}

這似乎是不正確的紅寶石(我選擇了一個隨機阿拉伯字符,因爲阿拉伯有UNICASE字母):

這似乎是一個非常好的跡象,\p{Alpha}只是Ruby中\p{L}的別名。在Rubular上,您還可以看到\p{Alpha}在Ruby 1.8.7中不可用。

注意,i修改是不相關的在任何情況下,因爲這兩個\p{Alpha}\p{L}比賽都大寫和小寫字符反正。

編輯:

一哈,是有區別的!我剛剛發現了this PDF關於Ruby的新的正則表達式引擎(如上所述從Ruby 1.9開始使用)。 \p{Alpha}可用,無論編碼如何(如果沒有Unicode支持,可能僅匹配[A-Za-z]),而\p{L}明確是Unicode屬性。這意味着,\p{Alpha}的行爲與POSIX正則表達式中的行爲完全相同,區別在於此處對應於\p{L},但在POSIX中對應於\p{L&}

+0

謝謝。我剛剛意識到你指出了關於'i'修飾符的內容。 –

+0

@BishmaStornelli看起來我並不完全正確。看我的編輯;) –

+0

再次謝謝你。很好的答案。 –

相關問題