在 Cocoa 中,正则表达式可能遵循 ICU Unicode 规则进行字符匹配,并且 ICU 标准包括用于匹配各种 Unicode 字母的字符属性,例如 \p{L} 。不过
NSString* str = @"A";
NSPredicate* pred = [NSPredicate predicateWithFormat"SELF MATCHES '\\p{L}'"];
NSLog(@"%d", [pred evaluateWithObject:str]);
似乎无法编译:
Can't do regex matching, reason: Can't open pattern U_REGEX_BAD_INTERVAL (string A, pattern p{L}, case 0, canon 0)
如果不支持字符属性(是吗?),我还能如何在我的 iOS 应用程序中检查字符串是否包含 Unicode 字母?
Best Answer-推荐答案 strong>
这里的重点是 MATCHES 需要一个完整的字符串匹配,而且,传递给正则表达式引擎的 \ 反斜杠应该是一个 literal 反斜杠。
因此正则表达式可以是
(?s).*\p{L}.*
这意味着:
(?s) - 启用 DOTALL 模式
.* - 匹配 0 个或多个任意字符
\p{L} - 匹配一个 Unicode 字母
.* - 匹配零个或多个字符。
在 iOS 中,只需将反斜杠加倍:
NSPredicate * predicat = [NSPredicate predicateWithFormat"SELF MATCHES '(?s).*\\p{L}.*'"];
见 IDEONE demo
如果 NSPrediciate 中的反斜杠被特别处理,请使用:
NSPredicate * predicat = [NSPredicate predicateWithFormat"SELF MATCHES '(?s).*\\\\p{L}.*'"];
关于ios - 有没有办法检查字符串是否包含 Unicode 字母?,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/37386271/
|