正则表达式

正则表达式

有关正则表达式的参考文档链接:http://deerchao.net/tutorials/regex/regex.htm

iOS 中的使用

  • 正则表达式常用选项

    • CaseInsensitive 忽略大小写
    • DotMatchesLineSeparators . 匹配换行符
  • 匹配方案

    • . 匹配任意字符
    • * 匹配 0~任意 多个字符
    • ? 尽可能少的重复
  • 匹配函数

    • matchesInString
      • 重复匹配多次 pattern
      • 如果匹配成功,生成 NSTextCheckingResult 数组
    • firstMatchInString
      • 匹配第一个 pattern
      • 如果匹配成功,生成 NSTextCheckingResult
  • 匹配结果

    • numberOfRanges
      • 匹配的 range 计数
      • 如果匹配成功,是 () 的数量 + 1
    • rangeAtIndex

      • 0 和 pattern 完全匹配的内容
      • 1 第一个 () 的内容
      • 2...依次类推
    • 可以利用 NSString 的 substringWithRange 取得匹配结果

来源处理

  • 新浪微博来源字符串格式
<a href=\"http://app.weibo.com/t/feed/310OQS\" rel=\"nofollow\">精彩微客</a>

目标:从一个 html 的 href 中提取 链接文字 Link Text 需要使用正则表达式

示例代码

let str = "<a href=\"http://app.weibo.com/t/feed/310OQS\" rel=\"nofollow\">精彩微客</a>"

let pattern = "<a href=\"(.*?)\".*?>(.*?)</a>"

let regex = try! NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions.DotMatchesLineSeparators)

if let result = regex.firstMatchInString(str, options: NSMatchingOptions(rawValue: 0), range: NSMakeRange(0, str.characters.count)) {

    print(result.numberOfRanges)

    let r1 = result.rangeAtIndex(1)
    let r2 = result.rangeAtIndex(2)

    print((str as NSString).substringWithRange(r1))
    print((str as NSString).substringWithRange(r2))
}

建立分类

func href() -> (link: String?, text: String?) {
    let pattern = "<a href=\"(.*?)\".*?>(.*?)</a>"
    let str: NSString = self

    let regex = try! NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions.DotMatchesLineSeparators)

    if let result = regex.firstMatchInString(self, options: NSMatchingOptions(rawValue: 0), range: NSMakeRange(0, str.length)) {

        print(result.numberOfRanges)

        let r1 = result.rangeAtIndex(1)
        let r2 = result.rangeAtIndex(2)

        return(str.substringWithRange(r1), str.substringWithRange(r2))
    }

    return (nil, nil)
}

集成到微博项目

  • 将分类拖拽至项目的 Tools 目录
  • 修改 Status 模型
/// 微博来源
var source: String? {
    didSet {
        source = source?.href().text ?? ""
    }
}

运行测试 :D

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值