()[\]\\.,;:\s@\"]+)*)|-6ren">
gpt4 book ai didi

ios - 如何转义正则表达式字符串

转载 作者:行者123 更新时间:2023-11-28 08:34:49 25 4
gpt4 key购买 nike

我有以下用于确定有效电子邮件地址的正则表达式字符串(包括特殊字符,例如 ö、ê、ī 等):

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

我的应用因以下错误而崩溃:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Can't do regex matching, reason: Can't open pattern U_REGEX_MISSING_CLOSE_BRACKET (string scött.hôdśōn@example.com, 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,}))$, case 0, canon 0)'

我的猜测是我以某种方式错误地转义了正则表达式字符串。有人能指出我正确的方向吗?

最佳答案

关于实际改进正则表达式的评论可能应该引起注意。有一些事情在你应该转义的时候没有转义,特别是 ] 和在你不需要转义的时候转义,特别是 . inside []"。在你的正则表达式中修复这些之后

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

我怀疑“缺少括号”错误是由 ] 的不正确转义引起的,它过早地关闭了您拥有的一些交流发电机 block 。同样,您帖子中的评论员是正确的,正则表达式本身肯定可以改进

关于ios - 如何转义正则表达式字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38101131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com