regex - 无法在 Swift 中进行正则表达式匹配

标签 regex swift

我正在做一个 Swift 项目,我需要使用这个正则表达式来检查电子邮件是否有效,但是当应用程序开始检查时应用程序崩溃并给我这个错误:

NSInternalInconsistencyException', reason: 'Can't do regex matching, reason: Can't open pattern U_REGEX_MISSING_CLOSE_BRACKET

这是我的正则表达式:

^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+[\\.]*)+[a-zA-Z]{2,}))$

最佳答案

检查正则表达式模式中未转义的括号:

let pattern
= "^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))"
//    [     [                 ]     [     [                 ]
+ "@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+[\\.]*)+[a-zA-Z]{2,}))$"
//       [   ]        [   ]        [   ]        [   ]            [            ] [   ]   [      ]

您的模式的前半部分有一些不匹配的括号 [ ]

在正则表达式的一些方言中,你不需要在 [] 之间转义 [,但在其他一些方言中,你需要

尝试向您的正则表达式添加一些转义符:

let pattern
= "^(([^<>()\\[\\]\\.,;:\\s@\\\"]+(\\.[^<>()\\[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))"
//    [     ^^                  ]     [     ^^                  ]
+ "@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+[\\.]*)+[a-zA-Z]{2,}))$"
//       [   ]        [   ]        [   ]        [   ]            [            ] [   ]   [      ]

关于regex - 无法在 Swift 中进行正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39346474/

相关文章:

java - SimpleDateFormat - 您需要使用 RegEx 吗?

ios - 无法获取 NSDictionary 键的值,出现错误 : The process has been returned to the state before expression evaluation

ios - Swift - 如何查找数组中数组中项目的索引

ios - 如何为 VoiceOver 排队多个辅助功能通知?

ios - 从 AppDelegate 内访问 NavigationController 指向的初始 View

java - 使用正则表达式将句子拆分为单词,其中单词还包含多个空格

php preg_replace 使用捕获的组作为数组索引

javascript - 正则表达式精确匹配 5 个数字和 1 个可选空格

python - 如何获得与python的最短匹配(复杂的非贪婪模式)

ios - 从 Swift 访问 Azure 表存储