这儿每天分享一个 iOS 的新知识,快来重视我吧

前言

前面介绍了一些关于正则表达式的常规用法,其实在 WWDC 2022 上,swift 5.7 中带来了字符串匹配相关的严重升级,其间就包括正则方面的新功能,今日就来讲讲。

Regex

Regex 类型是 iOS 16 新出的一个类型,运用这个类型,你能够很轻易地生成正则表达式:

letpattern=#"(d+)"#
letregex=tryRegex(pattern)

这种创建方式和 NSRegularExpression 差不多,首要,你还是需求将特殊符号用反斜杠符号,其次,你需求运用 try 来捕获异常情况。

为了防止上述情况,swift 出了一种运用两个斜杠”/…/”来直接生成 Regex 的办法,以上代码等同于:

letregex1=/(d+)/

这种通过正则语法糖的方式生成正则表达式时,能够在编译器查看是否有语法错误,还有 Xcode 语法突出显现。

运用这个表达式能够检测字符串中的称号和数字:

letregex=/(w+)s+(d+)/
letinput="Tom123xyz"
ifletresult=input.firstMatch(of:regex){
print(result.0)//Tom123
print(result.1)//Tom
print(result.2)//123
}

输出的结果是一个元组,榜首个值正则表达式匹配的所有内容,第二个值是捕获的榜首个子字符串,第三个值是捕获的第二个子字符串,以此类推。

也能够用元组命名每个属性的姓名:

letregex=/(w+)s+(d+)/
letinput="Tom123xyz"
iflet(matched,name,count)=input.firstMatch(of:regex)?.output{
print(matched)//Tom123
print(name)//Tom
print(count)//123
}

咱们还能够在正则表达式里直接命名捕获的变量

letinput="Tom123xyz"
letregex=/(?<name>w+)s+(?<count>d+)/
ifletmatch=input.firstMatch(of:regex){
print(match.name)//Tom
print(match.count)//123
}

不同的匹配方式

swift 供给了几种不同的办法,能够用来匹配正则表达式:

//首个匹配
input.firstMatch(of:regex)
//完好匹配
input.wholeMatch(of:regex)
//前缀匹配
input.prefixMatch(of:regex)
letline="Tom1234"
//将空格替换成逗号
letline1=line.replacing(/s+/,with:",")//Tom,1234
//去除字母和空格
letline2=line.trimmingPrefix(/w+s+/)//1234
//运用空格拆分
letfields=line.split(separator:/s+/)//["Tom","1234"]

正则表达式生成器

除此之外,swift 还供给了正则表达式构建器 DSL,能够以更结构化,可读性更高的办法来构建你想要的正则表达式。

首要导入 RegexBuilder 模块:

importRegexBuilder

然后构建正则表达式:

let regex = Regex {
    Capture {
        OneOrMore(.word) // 一个或多个单词
    }
    OneOrMore(.whitespace) // 一个或多个空格
    Capture {
   OneOrMore(.digit) // 一个或多个数字
    }
}
let input = "Tom 123 xyz"
if let match = input.firstMatch(of: regex) {
    let name = match.1    // Tom
    let count = match.2   // 123
}

以前的正则表达式语法非常难以回忆,有了这套 DSL 构建器之后,正则将会简单许多,除了上边用到的 OneOrMore 之外,还有许多可用的语法表达式,以下是一些常用的:

  • One 准确匹配呈现一次

  • OneOrMore 匹配呈现一次或多次

  • ZeroOrMore 匹配呈现零次或一次

  • Lookahead 仅当其内容在给定位置匹配时才答应匹配持续

  • NegativeLookahead 仅当其内容在给定方位不匹配时才答应持续匹配

  • Repeat 指定次数的匹配

其间可输入的常用参数有:

  • .any 与任何元素匹配的字符类

  • .anyNonNewline 与任何非换行符元素匹配的字符类

  • .digit 任意数字

  • .hexDigit 任何十六进制数字

  • .word 任何单词字符

  • .whitespace 任何空格字符

其他内容我们能够自行探究一下。

这儿每天分享一个 iOS 的新知识,快来重视我吧

本文同步自微信公众号 “iOS新知”,每天准时分享一个新知识,这儿仅仅同步,想要及时学到就来重视我吧!