2015-01-08 31 views
1

爲什麼格局NSRegularExpression與法國性格

[A-Z][A-z]* 

使用NSRegularExpression。我想匹配駱駝字法語單詞Vénus回報Ve,但這個詞很奇怪

+1

您在詢問之前是否搜索答案? 「當指定一系列字符時,例如[a-Z](即小寫a到大寫z),計算機的區域設置將通過字符編碼的數字排序來確定內容。」 - https://en.wikipedia.org/wiki/Regular_expression#Character_classes – Onots

+1

@Onots:NSRegularExpression並非如此。你所引用的是POSIX正則表達式的行爲,這在這裏不適用。 – nhahtdh

+1

@nhahtdh:謝謝你指出。所以我今天搜索了一些東西:NSRegularExpression使用ICU指定的模式語法。從ICU站點:「[A-M] \t範圍 - 匹配從A到M中的任何字符。要包含的字符由Unicode代碼點排序確定」。 – Onots

回答

2

爲什麼你的正則表達式匹配Ve,而不是原因是因爲there are two ways to represent an é in Unicode:

  • 使用歸一化的s單點代碼點U+00E9
  • 使用「分解」形式:e,後面跟着組合標記´U+0065 U+0301)。請注意後者是而不是實際的「獨立」´字符(U+00B4)。

您的字符串顯然是使用第二個選項編碼的。因此[A-z]只與組合字符的前半部分相匹配。由於以下´不匹配,正則表達式在此處停止。在對其應用正則表達式之前,您應該對字符串進行規範化。

此外,使用[A-Za-z]而不是[A-z]。否則,一些非字母字符如^]也將被匹配。

+0

不,我沒有測試,我只是在錯誤的情況下,我會刪除我的答案。 – Dair

+0

現在,我完全理解你在閱讀後http://nshipster.com/cfstringtransform/ .Thx –