import Foundation
let pattern = #"^(?<MasterGroup>(?<MatchMisc>.{0,8}?(刚刚|烫手|热乎|出息|来[了啦辣喽]).{0,8}+)|(?<StrictMatchNumber>\d)|(?<MatchMost>.{0,8}?(?<PreQuantifier>[后前]?)第?(?<NumberMatch>[0-9一二三四五六七八九十两俩百万千亿半]+[kw]?)(?<PostQuantifierMatch>[后前个条发第]?(?<PostQuantifierMost>点?赞|播放?|弹幕|看|转发?|开|分钟?|小?时|秒|min|h)|(?<CompareMatch>[以之]?[后前])).{0,8}+)|(?<MatchOrder>.{0,8}?[前第](?&NumberMatch).{0,8}+)|(?<MatchInverse>.{0,8}?[前第](?&NumberMatch)[个名].{1,8}+)|(?<MatchAnchor>空降.{3,8}+))$"#
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = #"""
(注。以下测试样例部分取自某些视频的真实弹幕,少部分是自己编的句子)
看到我就是两百以后了
看到我你就不是第一了
1播放,256赞,B站特色
一分钟!!!312个赞
两分钟热热乎乎
600播放500赞
第一名是我
第838个赞我收下了
天哪那,第四个转发!!!
4分钟
热乎
183条弹幕
十分钟的,还热乎啊,真香
关上前500发弹幕的大门
怎么过一会儿就18个转发了
关上前10000播放量的大门
热乎25min
8888点赞
12个
第4
来了来了,1分钟!
热乎 前2000
我迟到了10min!!!
有10只
2分钟,烫
2021第一天就这么刺激
借刀杀人*2
2333333
66666666
2
1
2:42
出息了
7分钟 很快啊!
一番定夺
第一哈哈哈
半小时,冻死了
空降00:00
牛顿第二定律
你这到底是保护村庄还是破坏村庄来了
燃起来了!
来了来了
很残酷的事实:在未命名的情况下不管你杀不杀末影螨它都会在两分钟后消失
(以下是误杀的例子。注意,这一些误杀并不准备修复,毕竟正则是读不懂人话的。)
三分钟后会消失
(。。。我找不到误杀的例子了。。。)
刚刚,放进岩浆里还能吃
(哇这个竟然没有屏蔽!想办法修复中哇。。。)
"""#
let stringRange = NSRange(location: 0, length: testString.utf16.count)
let matches = regex.matches(in: testString, range: stringRange)
var result: [[String]] = []
for match in matches {
var groups: [String] = []
for rangeIndex in 1 ..< match.numberOfRanges {
let nsRange = match.range(at: rangeIndex)
guard !NSEqualRanges(nsRange, NSMakeRange(NSNotFound, 0)) else { continue }
let string = (testString as NSString).substring(with: nsRange)
groups.append(string)
}
if !groups.isEmpty {
result.append(groups)
}
}
print(result)
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Swift 5.2, please visit: https://developer.apple.com/documentation/foundation/nsregularexpression