我有以下正则表达式字符串用于确定有效的电子邮件地址(包括特殊字符,例如ö,ê,ī等):
^(([^<>()[\]\\.,;:\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,}))$
它在https://regex101.com上作为正则表达式进行了测试。然后我想在我的代码中包含这个字符串,所以我必须逃避它。因此,我最终得到以下字符串:
^(([^<>()[\\]\\\\.,;:\\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,}))$
现在,当我运行我的代码时:
private static func regexMatch(regex: String, string: String) -> Bool {
let stringTest = NSPredicate(format:"SELF MATCHES %@", regex)
return stringTest.evaluateWithObject(string)
}
我的应用崩溃时出现以下错误:
***由于未捕获的异常'NSInternalInconsistencyException'终止应用程序,原因:'无法进行正则表达式匹配,原因:无法打开模式U_REGEX_MISSING_CLOSE_BRACKET(字符串scött.hôdśōn@example.com,模式^(([^ &LT;&GT;()[] \;:\ S @ \ “] +([^&LT;&GT;()[] \;:。\ 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,}))$,case 0,canon 0)'
我的猜测是我以某种方式错误地转义正则表达式字符串。有人能指出我正确的方向吗?
答案 0 :(得分:0)
应该注意关于实际提高你的正则表达式的评论。有些事情你没有应该逃避,特别是]
并且在你不需要时逃避,特别是在.
和[]
内"
。在你的正则表达式中修复它们之后
^(([^<>()[\].,;:\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,}))$
然后逃离特殊字符,我们得到
"/^(([^<>()[\\].,;:\\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)
我将我的正则表达式字符串更新为以下内容,现在它似乎正在运行。
$scope.notifications = angular.extend($scope.notifications1,$scope.notifications2)