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

时间:2016-09-06 10:15:50

标签: regex swift

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

  

NSInternalInconsistencyException',原因:'无法进行正则表达式匹配,原因:无法打开模式U_REGEX_MISSING_CLOSE_BRACKET

这是我的REGEX:

^(([^<>()[\\]\\.,;:\\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,}))$

1 个答案:

答案 0 :(得分:1)

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

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,}))$"
//       [   ]        [   ]        [   ]        [   ]            [            ] [   ]   [      ]