2016-07-27 13 views
0

我想弄清楚如何在字符串中找到正則表達式匹配的範圍。搜索需要既是案件又是變音符號不敏感。我一直在使用這樣的嘗試:正則表達式匹配的範圍在Swift中忽略大小寫和變音符號

"München".rangeOfString(
    "[mno][tuv][mno]", 
    options: [ 
     .RegularExpressionSearch, 
     .DiacriticInsensitiveSearch, 
     .CaseInsensitiveSearch], 
    range: nil, 
    locale: nil) 

但它看起來像.RegularExpressionSearch不隨.DiacriticInsensitiveSearch工作。


我試過使用stringByFolding方法在搜索前轉換字符串。此方法的問題是它將ß轉換爲ss,從而更改字符串的長度並可能使結果範圍無效。

回答

0

除非您以這種方式編寫表達式,否則沒有辦法讓正則表達式變爲不區分變音的。明確的參考文獻是unicode regular expression standard。這裏的例子顯示瞭如何規範匹配字符。你必須明確列出它們,但這是我知道這樣做的唯一途徑。

支持unicode的正則表達式引擎可以選擇在匹配之前對字符串進行規範化。我找不到任何文件說明Apple/ICU是否這樣做。

0

如文檔中提到的,關於String.CompareOptions.regularExpression

... 如果設置,沒有其他選擇可以申請除caseInsensitiveanchored。 ...

所以你不能結合diacriticInsensitiveregularExpression選項。

爲了實現不區分變音的正則表達式,可以使用Unicode類別\p{L}來匹配字母。更多的Unicode類別可以在這裏找到:https://www.regular-expressions.info/unicode.html

相關問題