在 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 字母?
这里的重点是 MATCHES
需要一个完整的字符串匹配,而且,传递给正则表达式引擎的 \
反斜杠应该是一个 literal 反斜杠。
因此正则表达式可以是
(?s).*\p{L}.*
这意味着:
(?s)
- 启用 DOTALL 模式.*
- 匹配 0 个或多个任意字符\p{L}
- 匹配一个 Unicode 字母.*
- 匹配零个或多个字符。在 iOS 中,只需将反斜杠加倍:
NSPredicate * predicat = [NSPredicate predicateWithFormat"SELF MATCHES '(?s).*\\p{L}.*'"];
如果 NSPrediciate
中的反斜杠被特别处理,请使用:
NSPredicate * predicat = [NSPredicate predicateWithFormat"SELF MATCHES '(?s).*\\\\p{L}.*'"];
关于ios - 有没有办法检查字符串是否包含 Unicode 字母?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37386271/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |