Swift 正则表达式的使用

Swift 中的正则表达式使用非常简单,直接上代码:

1
2
3
4
5
6
7
8
9
10
extension String {
/// 默认区分大小写,如需忽略大小写,options = .caseInsensitive
func match(pattern: String, options: NSRegularExpression.Options = []) -> [NSTextCheckingResult]? {
let regex = try? NSRegularExpression(pattern: pattern, options: options)
guard regex != nil else {
return nil
}
return regex!.matches(in: self, options: .reportProgress, range: NSRange(location: 0, length: self.count))
}
}

以上是对 String 的扩展,使用如下:

1
2
3
4
5
6
7
8
9
10
11
12
let input = "Hello, world, hello, everyone"
if let results = input.match(pattern: "\\bhello\\b", options: .caseInsensitive) {
for res in results {
print(res.range)
print("~~~~~~~~")
}
}

// print {0, 5}
// print ~~~~~~~~
// print {14, 5}
// print ~~~~~~~~

关于正则表达式的使用,这里不再赘述,读者可以参考 正则表达式30分钟入门教程

NSRegularExpression.Options 的各个选项的作用如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
NSRegularExpressionCaseInsensitive             = 1 << 0,     // 不区分大小写字母模式

NSRegularExpressionAllowCommentsAndWhitespace = 1 << 1, // 忽略掉正则表达式中的空格和#号之后的字符

NSRegularExpressionIgnoreMetacharacters = 1 << 2, // 将正则表达式整体作为字符串处理

NSRegularExpressionDotMatchesLineSeparators = 1 << 3, // 允许.匹配任何字符,包括换行符

NSRegularExpressionAnchorsMatchLines = 1 << 4, // 允许^和$符号匹配行的开头和结尾

NSRegularExpressionUseUnixLineSeparators = 1 << 5, // 设置\n为唯一的行分隔符,否则所有的都有效。

NSRegularExpressionUseUnicodeWordBoundaries = 1 << 6 // /使用Unicode TR#29标准作为词的边界,否则所

NSRegularExpression.MatchingOptions 的各个选项的作用如下:

1
2
3
4
5
6
7
8
9
NSMatchingReportProgress         = 1 << 0,       // 找到最长的匹配字符串后调用block回调

NSMatchingReportCompletion = 1 << 1, // 找到任何一个匹配串后都回调一次block

NSMatchingAnchored = 1 << 2, // 从匹配范围的开始进行极限匹配

NSMatchingWithTransparentBounds = 1 << 3, // 允许匹配的范围超出设置的范围

NSMatchingWithoutAnchoringBounds = 1 << 4 // 禁止^和$自动匹配行开始和结束
您的支持将鼓励我继续创作!
0%