美文网首页
iOS中正则表达式的使用

iOS中正则表达式的使用

作者: lq_ios | 来源:发表于2019-12-16 17:59 被阅读0次

    正则表达式的使用说明

    正则表达式中用的枚举

    1. 正则表达式匹配的方式 NSRegularExpression.Options
    public struct Options : OptionSet {
            ///匹配字母,不区分大小写。
            public static var caseInsensitive: NSRegularExpression.Options { get }
            /// 忽略模式中的空格和#前缀的注释。
            public static var allowCommentsAndWhitespace: NSRegularExpression.Options { get }
            ///将整个模式视为文字字符串。
            public static var ignoreMetacharacters: NSRegularExpression.Options { get }
            ///允许 "." 匹配任何字符,包括行分隔符。(在其他语言中"."匹配除“`\``n`”之外的任何单个字符,要匹配包括“`\``n`”在内的任何字符,请使用像“`(.|\n)`”的模式。)
            public static var dotMatchesLineSeparators: NSRegularExpression.Options { get }
            ///允许^和$匹配行的开头和结尾。
            public static var anchorsMatchLines: NSRegularExpression.Options { get }
            ///仅将\n视为行分隔符(否则,将使用所有标准行分隔符)。
            public static var useUnixLineSeparators: NSRegularExpression.Options { get }
            ///使用Unicode TR#29指定单词边界(否则,使用传统的正则表达式单词边界)。
            public static var useUnicodeWordBoundaries: NSRegularExpression.Options { get }
        }
    
    1. 匹配选项常量指定表达式匹配方法匹配规则。 所有使用正则表达式搜索或替换值的方法都将使用这些常量。 NSRegularExpression.MatchingOptions
    public struct MatchingOptions : OptionSet {
            ///找到最长的匹配字符串后调用block回调。 该选项对除enumerateMatches(in:options:range:using :)以外的方法无效。
            public static var reportProgress: NSRegularExpression.MatchingOptions { get } 
            ///完成任何匹配后,调用该块一次。找到任何一个匹配串后都回调一次block
            public static var reportCompletion: NSRegularExpression.MatchingOptions { get }
            ///从匹配范围的开始出进行极限匹配
            public static var anchored: NSRegularExpression.MatchingOptions { get } 
            ///允许匹配超出搜索范围的范围。
            public static var withTransparentBounds: NSRegularExpression.MatchingOptions { get }
            ///禁止^和$自动匹配搜索范围的开始和结束。
            public static var withoutAnchoringBounds: NSRegularExpression.MatchingOptions { get }
        }
    

    3.匹配进行,完成或失败时,由block设置。 方法enumerateMatches(in:options:range:using :)使用。

    public struct MatchingFlags : OptionSet {
            ///匹配到最长串时被设置
            public static var progress: NSRegularExpression.MatchingFlags { get }
            ///全部分配完成后被设置
            public static var completed: NSRegularExpression.MatchingFlags { get } 
            ///匹配到设置范围的末尾时被设置
            public static var hitEnd: NSRegularExpression.MatchingFlags { get } 
            ///当前匹配到的字符串在匹配范围的末尾时被设置
            public static var requiredEnd: NSRegularExpression.MatchingFlags { get }
            ///由于错误导致的匹配失败时被设置
            public static var internalError: NSRegularExpression.MatchingFlags { get } 
        }
    

    NSRegularExpression常用的方法

    1. NSRegularExpression的基本匹配方法。
    open func enumerateMatches(in string: String, options: NSRegularExpression.MatchingOptions = [], range: NSRange, using block: (NSTextCheckingResult?, NSRegularExpression.MatchingFlags, UnsafeMutablePointer<ObjCBool>) -> Void)
    
    • 例子
    ///NSRegularExpression的基本匹配方法。
    let  test = "abcdefabcghijkabclmn"
    let  pattern = "abc"
    let  re = try? NSRegularExpression.init(pattern: pattern, options: .caseInsensitive)
    re?.enumerateMatches(in: test, options: .reportCompletion, range:NSRange.init(location: 0, length: test.count), using: { (result, flag, point) in
         guard let res = result else{
            return
         }
         print(res)
    })
    ///输出结果
    /*
     <NSSimpleRegularExpressionCheckingResult: 0x1006896d0>{0, 3}{<NSRegularExpression: 0x10068c0d0> abc 0x1}
     <NSSimpleRegularExpressionCheckingResult: 0x1006896d0>{6, 3}{<NSRegularExpression: 0x10068c0d0> abc 0x1}
     <NSSimpleRegularExpressionCheckingResult: 0x1006896d0>{14, 3}{<NSRegularExpression: 0x10068c0d0> abc 0x1}
     */
    
    1. 查找结果以NSTextCheckingResult数组的形式返回
    open func matches(in string: String, options: NSRegularExpression.MatchingOptions = [], range: NSRange) -> [NSTextCheckingResult]
    
    • 例子
    /// 查找结果以NSTextCheckingResult数组的形式返回
    let test = "abcdefabcghijkabclmn"
    let pattern = "abc"
    let re = try? NSRegularExpression.init(pattern: pattern, options: .caseInsensitive)
    let arr =  re?.matches(in: test, options: .reportCompletion, range: NSRange.init(location: 0, length: test.count))
    arr?.forEach({ (result) in
        print(result)
    })
    /*
    <NSSimpleRegularExpressionCheckingResult: 0x100671300>{0, 3}{<NSRegularExpression: 0x100673b70> abc 0x1}
    <NSSimpleRegularExpressionCheckingResult: 0x100671400>{6, 3}{<NSRegularExpression: 0x100673b70> abc 0x1}
    <NSSimpleRegularExpressionCheckingResult: 0x100671440>{14, 3}{<NSRegularExpression: 0x100673b70> abc 0x1}
    */
    
    1. 返回匹配结果到的个数
    open func numberOfMatches(in string: String, options: NSRegularExpression.MatchingOptions = [], range: NSRange) -> Int
    
    • 例子
    ///返回匹配结果到的个数
    let test = "abcdefabcghijkabclmn"
    let pattern = "abc"
    let re = try? NSRegularExpression.init(pattern: pattern, options: .caseInsensitive)
    let num =  re?.numberOfMatches(in: test, options: .reportProgress, range: NSRange.init(location: 0, length: test.count))
    print(num!)
    ///输出结果
    /*
     3
     */
    
    1. 返回匹配到的第一个结果(NSTextCheckingResult)
    open func firstMatch(in string: String, options: NSRegularExpression.MatchingOptions = [], range: NSRange) -> NSTextCheckingResult?
    
    1. 返回匹配到的第一个结果的range(NSRange)
    open func rangeOfFirstMatch(in string: String, options: NSRegularExpression.MatchingOptions = [], range: NSRange) -> NSRange
    
    1. 将匹配到的结果替换为特定的字符串,并将替换后生成的新的字符串返回
    open func stringByReplacingMatches(in string: String, options: NSRegularExpression.MatchingOptions = [], range: NSRange, withTemplate templ: String) -> String
    
    1. 将原字符串中匹配到的结果用指定的字符串替换,返回值为Int类型,是匹配并替 换的个数
    open func replaceMatches(in string: NSMutableString, options: NSRegularExpression.MatchingOptions = [], range: NSRange, withTemplate templ: String) -> Int
    
    1. 对于实现自己的替换功能的客户端,这是一种对单个结果执行模板替换的方法,给定与结果匹配的字符串,将偏移量添加到字符串中的结果位置(例如, 如果对字符串进行了修改(由于已匹配)而移动了结果)和替换模板。
    open func replacementString(for result: NSTextCheckingResult, in string: String, offset: Int, template templ: String) -> String
    
    1. 此类方法将通过在给定字符串的必要位置添加反斜杠转义符来生成字符串,以转义将被当成模板元字符的字符。
    open class func escapedTemplate(for string: String) -> String
    

    相关文章

      网友评论

          本文标题:iOS中正则表达式的使用

          本文链接:https://www.haomeiwen.com/subject/bnpdnctx.html