2016-07-27 15 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です。この例では、一致する文字を正規化する方法を示しています。あなたは明示的にそれらをリストアップする必要がありますが、それが私がそれを行うために知っている唯一の方法です。

ユニコードをサポートする正規表現エンジンは、一致する前に文字列を正規化することを選択できます。私はApple/ICUがこれをしていると言っている文書は見つけられませんでした。 String.CompareOptions.regularExpressionについて、文書で述べたように

0

:設定した場合

... 、他のオプションはcaseInsensitiveanchored除いて適用することはできません。 ...

diacriticInsensitiveregularExpressionオプションを組み合わせることはできません。

発音区別符で囲まれていない正規表現を実現するには、Unicodeカテゴリ\p{L}を使用して、文字である文字を一致させることができます。より多くのUnicodeカテゴリはここにあります:https://www.regular-expressions.info/unicode.html

関連する問題