• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 带有正则表达式捕获的 NSPredicate 总是得到 0 个结果

[复制链接]
菜鸟教程小白 发表于 2022-12-12 13:36:28 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

大家好,

我正在为将 正则表达式 放入 NSPredicate 中而摸不着头脑。

我想将我们所有的缩略图从 Documents 目录移动到 Caches 目录中并捕获所有我创建的正则表达式:_thumb(@[2-3]x)?\.jpg .

Here on regex101.com你可以看到上面的正则表达式处理这个测试数据:

grwior_thumb.jpg          <- match
grwior.jpg
[email protected]    <- match
vuoetrjrt.jpg
hafiruwhf_thumb.jpg       <- match
[email protected]    <- match
[email protected]    <- match
hafiruwhf.jpg

但是当我把它放在代码中时,它什么都不匹配:

NSError *error = nil;
NSFileManager *fileManager = [NSFileManager defaultManager];

// Find and move thumbs to the caches folder
NSArray<NSString *> *mediaFilesArray = [fileManager contentsOfDirectoryAtPath:documentsPath error:&error];

NSString *regex = @"_thumb(@[2-3]x)?\\.jpg";
NSPredicate *thumbPredicate = [NSPredicate predicateWithFormat: @"SELF ENDSWITH %@", regex];

NSArray<NSString *> *thumbFileArray = [mediaFilesArray filteredArrayUsingPredicate:thumbPredicate];

thumbFileArray 总是有 0 个元素...

我做错了什么?



Best Answer-推荐答案


使用 MATCHES 而不是 ENDSWITH,因为 ENDSWITH 不会将表达式视为 正则表达式,但要确保匹配字符串开头的所有字符,因为 MATCHES 需要完整的字符串匹配,所以你需要以某种方式匹配 _.

使用

NSString *regex = @".*_thumb(@[23]x)?\\.jpg";

然后

[NSPredicate predicateWithFormat: @"SELF MATCHES %@", regex]

.* 将尽可能多地匹配除换行符以外的任何 0+ 字符。

注意,如果你只想匹配23,你不妨写[23],不需要a - 这里是范围操作符。

您也可以将 (@[23]x)? 替换为 (?[23]x)?,即将捕获组更改为 non-capturing ,因为您似乎不需要稍后可以访问子匹配。如果这样做,请保留可选的 capturing 组。

关于ios - 带有正则表达式捕获的 NSPredicate 总是得到 0 个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45298587/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap