gpt4 book ai didi

ios - 有没有办法检查字符串是否包含 Unicode 字母?

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:30:59 24 4
gpt4 key购买 nike

在 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 需要一个完整的字符串匹配,而且,传递给正则表达式引擎的 \ 反斜杠应该是一个文字 反斜杠。

因此正则表达式可以是

(?s).*\p{L}.*

这意味着:

  • (?s) - 启用 DOTALL 模式
  • .* - 匹配 0 个或多个任意字符
  • \p{L} - 匹配一个 Unicode 字母
  • .* - 匹配零个或多个字符。

在 iOS 中,只需将反斜杠加倍即可:

NSPredicate * predicat = [NSPredicate predicateWithFormat:@"SELF MATCHES '(?s).*\\p{L}.*'"];

参见 IDEONE demo

如果 NSPredicate 中的反斜杠被特殊处理,使用:

NSPredicate * predicat = [NSPredicate predicateWithFormat:@"SELF MATCHES '(?s).*\\\\p{L}.*'"];

关于ios - 有没有办法检查字符串是否包含 Unicode 字母?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37386271/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com