正则表达式问题:如何标记邮箱多余点并忽略字母内嵌点?
解决邮箱中多余连续点的正则匹配问题
要精准标记邮箱里的多余连续点(忽略单个内嵌点),可以使用以下正则表达式:
(?<=\.)\.
工作原理
(?<=\.):正向肯定后顾断言,确保当前匹配的点的前一个字符也是点,也就是说只匹配连续点序列中的第二个及以后的点\.:匹配当前的点
这样就能避开单个的内嵌点(比如mike.smith或yahoo.com里的单个点),只标记连续重复的多余点。
测试示例
针对你的错误邮箱:
mike.smith@yahoo..com→ 会匹配yahoo..com中的第二个点mike....smith@yahoo.com→ 会匹配mike....smith中的后三个点
原正则问题分析
你之前使用的(\.(?!(\.\w)))之所以会匹配单个内嵌点,是因为这个正则的逻辑是“匹配一个点,且该点后面不是.加单词字符”。当单个点后面直接跟单词字符(比如mike.smith里的.后面是s)时,断言(?!\.\w)成立,所以这个单个点会被错误匹配。
内容的提问来源于stack exchange,提问作者Pete
相关产品推荐
相关产品推荐

