如何获得正则表达式匹配的范围

时间:2018-04-25 10:12:23

标签: swift regex range

我正在寻找一种从正则表达式匹配中获取范围的方法。我有一个字符串

  

我正在寻找@ {1 | Tom Lofe}和@ {2 | Cristal Dawn}

从这个字符串中,我需要使用以下正则表达式来获取这些匹配的范围

"@\\{(\\d+) ?\\| ?(\\w+ *?\\w*?)\\}"

最好的方法是什么?到目前为止,我只能得到比赛而不是比赛。显然,标准的Swift函数range(of: <#T##StringProtocol#>, options: <#T##String.CompareOptions#>, range: <#T##Range<String.Index>?#>, locale: <#T##Locale?#>)应该能够做到这一点,但我不知道如何使用它,并且似乎无法找到一个好的例子。

我也尝试过这个问题的答案get all ranges of a substring in a string in swift,但又一次无法让它发挥作用。

1 个答案:

答案 0 :(得分:1)

这适用于Xcode Playground,但如果它不适合你,请告诉我。

let regex = try! NSRegularExpression(pattern: "@\\{(\\d+) ?\\| ?(\\w+ *?\\w*?)\\}", options: [])

let input = "I'm looking for @{1 | Tom Lofe} and @{2 | Cristal Dawn}"
let range = NSRange(location: 0, length: input.utf16.count)

for match in regex.matches(in: input, options: [], range: range) {
    print(match.range)
}

打印:

{16, 15}
{36, 19}