无忧启动论坛

 找回密码
 注册
搜索
最纯净的「微PE装机优盘」UEPON大师作品系统gho:最纯净好用系统下载站虚位以待
虚位以待广告联系 QQ:184822951 微信:wuyouceoidc大全★服务器租用★香港/5M/450元
查看: 1132|回复: 0

swift 中使用正则表达式matchesInString 方法 一个注意事项

[复制链接]
发表于 2016-6-20 17:06:54 | 显示全部楼层 |阅读模式
let str = "a中\r\n"
str.characters.count            \\ 输出 3  "中"=1 "\r\n" = 1
(str as NSString).length       \\ 输出 4
strlen(str)                          \\ 输出 6 "中"=3 其他各为1
str.lengthOfBytesUsingEncoding(NSUTF8StringEncoding) \\ 输出 6  "中"=3 其他各为1

当使用 NSRegularExpression  的 matchesInString(string: String, options: NSMatchingOptions, range: NSRange) -> [NSTextCheckingResult] 方法时,对这个NSRange 中的length 要特别注意

同一个从文本文件中获取的字符串,因其含有换行回车符

使用上面方法中的 NSRange 要用 (str as NSString).length,不然会出现取值不完整或溢出出错的情况。

  1. // 取值分组
  2. var pattern = "\\[(\\d+),(\\d+)\\](.*)"
  3. var regex = try! NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions.CaseInsensitive)

  4. // 获取多个匹配的分组值
  5. let matches = regex.matchesInString(str, options: NSMatchingOptions(rawValue: 0), range: NSMakeRange(0,(str as NSString).length))
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2020-1-20 23:55

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表