Swift中的正则表达式生成

时间:2019-02-03 08:10:45

标签: swift regex

我有一句话,以“ _h”开头和结尾。我想生成一个正则表达式,它可以在一个完整的字符串中捕获这种情况的多次出现。

我生成了一个正则表达式,看起来像这样的“ _h。 [a-zA-Z0-9]。 _h”。我想在JavaScript中添加一个“全局标志”,但找不到任何解决方案。

Input String: "_h Hello _h _h World _h"
Current output: Hello World

Expected output: [Hello, World]

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

let str = "_h Hello _h _h World _h"

let range =  NSRange(str.startIndex..., in: str)

let regex = try! NSRegularExpression(pattern: "(?<=_h).+?(?=_h)")

let matches = regex.matches(in: str, range: range)

let results: [String] = matches.compactMap { match in
    let subStr = String(str[Range(match.range, in: str)!]).trimmingCharacters(in: .whitespacesAndNewlines)
    return subStr.isEmpty ? nil : subStr
}

print(results)  //["Hello", "World"]

以下是正则表达式说明:

  • (?<=_h)_h的正向后退(区分大小写);
  • .+?:匹配任意字符(行终止符除外),且在1到无限次之间匹配,并尽可能少地匹配,并根据需要扩展;
  • (?=_h)_h的正面正视(区分大小写)。

NB :构建subStr时强制展开是安全的。