【问题标题】:Regex pattern with [:] returns as invalid带有 [:] 的正则表达式模式返回无效
【发布时间】:2018-01-03 18:24:56
【问题描述】:

我正在使用正则表达式搜索特定模式的文本,它似乎工作正常,直到我想包含一个“:”

我用来查找文本的函数是:

func matches(for regex: String, in text: String) -> [String] {

do {
    let regex = try NSRegularExpression(pattern: regex)
    let results = regex.matches(in: text,
                                range: NSRange(text.startIndex..., in: text))
    return results.map {
        String(text[Range($0.range, in: text)!])
    }
} catch let error {
    print("invalid regex: \(error.localizedDescription)")
    return []
 }
}

我用来测试模式的示例数组是:

var textstringarray = ["10:50 - 13:40","ABC"]

这是检查不同项目的循环:

for myString in textstringarray{
let matched2 = matches(for: "[0-9][0-9][:][0-9][0-9] [-] [0-9][0-9][:][0-9][0-9]", in: myString)
if !matched2.isEmpty{
    print(matched2)
}
}

我希望它只返回第一项,但登录 Playground 只显示

无效的正则表达式:值“[0-9][0-9][:][0-9][0-9] [-] [0-9][0-9][:][0 -9][0-9]” 无效

到目前为止,我发现第二个 [:] 的问题是,因为当我删除它时,一切正常。任何人有任何想法,我能做什么? 非常感谢

【问题讨论】:

  • \d{2}:\d{2} - \d{2}:\d{2}?无需将: 放入集合中。 - 也是如此。您可以直接声明它们(它们不是正则表达式中的特殊字符 - 好吧,- 只是在集合内,: 是如果伴随着其他字符,例如(?:),但这与您的情况无关)
  • 你的函数looks familiar :)
  • 太棒了!那解决了!非常感谢ctwheels!我刚刚摆脱了括号,现在它可以工作了!

标签: regex swift


【解决方案1】:

也许它认为[: ... :] 是无效的posix 字符类?对我来说似乎是一个错误。

[\:] 修复了吗? (虽然没有必要为单个字符使用字符类;您可以只使用: 而不是[:]。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多