我试图弄清楚如何在字符串中找到正则表达式匹配的范围。搜索需要对案例和变音符号不敏感。我尝试过这样的事情:
"München".rangeOfString(
"[mno][tuv][mno]",
options: [
.RegularExpressionSearch,
.DiacriticInsensitiveSearch,
.CaseInsensitiveSearch],
range: nil,
locale: nil)
但.RegularExpressionSearch
似乎与.DiacriticInsensitiveSearch
一起工作。
我尝试使用stringByFolding
方法在搜索之前转换字符串。此方法的问题在于它将ß
转换为ss
,从而更改字符串的长度并可能使结果范围无效。
答案 0 :(得分:0)
除非你以这种方式编写表达式,否则无法使正则表达式变得不那么敏感。最终引用是unicode regular expression standard。这里的示例显示了如何规范匹配的字符。您必须明确列出它们,但这是我知道的唯一方法。
支持unicode的正则表达式引擎可以选择在匹配之前规范化字符串。我无法找到任何文件说Apple / ICU是否这样做。
答案 1 :(得分:0)
如文档中所述,关于String.CompareOptions.regularExpression
:
... 如果设置,除了
caseInsensitive
和之外,不能应用其他选项anchored
。 ...
因此,您无法将diacriticInsensitive
与regularExpression
选项合并。
为了实现变音符号不敏感的正则表达式,可以使用Unicode类别\p{L}
来匹配字母字符。可以在此处找到更多Unicode类别:https://www.regular-expressions.info/unicode.html