如何使用Swift 5.7+正则字面量在字符串中查找范围
Swift 5.7+ 使用Regex字面量匹配字符串范围的方法
你想要的写法在Swift 5.7+里是完全可行的,直接用Regex字面量调用range(of:)即可,无需额外处理转义,代码如下:
let range = myString.range(of: /\s*\d+/)
完整使用示例
let myString = "test 456 example" // 匹配任意空白符开头的数字序列 if let matchRange = myString.range(of: /\s*\d+/) { let matchedSubstring = myString[matchRange] print("匹配到的内容:\(matchedSubstring)") // 输出 " 456" } else { print("未找到匹配") }
核心优势
- 无需转义反斜杠:直接写
\s、\d这类正则元字符,不用像旧版那样写\\s、\\d,代码可读性大幅提升 - 编译时验证:正则语法错误会在编译阶段直接报错,避免运行时才发现问题
- 性能更优:正则表达式在编译阶段就完成处理,省去了旧版运行时编译的开销
自定义匹配选项
如果需要特殊匹配规则(比如忽略大小写、多行模式),可以在Regex字面量末尾添加修饰符:
// 忽略大小写匹配字母 let caseInsensitiveRange = myString.range(of: /[a-z]+/i) // 多行模式,匹配每行开头的数字 let multiLineRange = myString.range(of: /^\d+/m)
这个方法完全基于Swift标准库的新Regex API,没有使用旧版NSRegularExpression相关逻辑,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Robin Stewart
相关产品推荐
相关产品推荐

