正则表达式匹配邮箱

本文首写于个人有道云笔记:
http://note.youdao.com/share/?id=6b2b0063b7b9963959fca3750b931baa&type=note 

java.util.regex.PatternSyntaxException: Illegal character range near index 24

[a-zA-Z0-9]+[a-zA-Z0-9_-.]*@([a-zA-Z0-9_-]+.)+[a-zA-Z_-]+

                        ^

正则表达式报错,说明有未转义的字符。

        括号内中的字符类,在“-”左右两边有字符时表示一个字符到另一个字符之间的字符。
而且必须是左边字符的值小于右边字符的值。

. 若表示点号本身需要转义(反斜杠\)正左反右

在普通的正则表达式中,15个具有特殊意义的元字符需要进行转义:
( [ { } ] ) \ ^ - $ | ? * + .

而在字符类中有点特殊,需要转义的有:
[ ] ^ - \

其中“-”放在字符类的两边的话,即放在左方括号右者右方括号的边上,也可以不用转义。


1

(0|([1-9][0-9]*)[+\\-*/])+(0|[1-9][0-9]*)

或者写成下面这样,即把“-”放到两边去,就不要转义了。


1

(0|([1-9][0-9]*)[-+*/])+(0|[1-9][0-9]*)

实例:

正则表达式匹配邮箱

// DNS规定,域名中的标号都由英文字母和数字组成,每一个标号不超过63个字符,也不区分大小写字母。

// 现在各级域名均可以包含中文。

// 域名可以只有一位,如亚马逊 http://www.Z.cnhttp://www.4.cn,顶级域名貌似至少两位,这里暂不限制。

// 标号中除连字符(-)外不能使用其他的标点符号。级别最低的域名写在最左边,而级别最高的域名写在最右边。

// 由多个标号组成的完整域名总共不超过255个字符。

// 创新工场域名:innovation-works.com,带-熟称扁担域名,貌似也有-开头的域名。

// 网易企业邮:帐号只能以字母或数字开头,可包含字母,数字,下划线(_),减号(-)和点(.),实际验证最长20位。0@cx.cf或1.@cx.cf。

// 网易邮:邮箱名6-18位;新浪字母邮、搜狐:邮箱名4-16位


// 匹配非中文邮箱

public void regexTest()
{

        String str = "sd速度-1-@-1-.com.cn!但是!";

        String regex = "[a-zA-Z0-9][a-zA-Z0-9_\\-\\.]{0,19}@(?:[a-zA-Z0-9\\-]+\\.)+[a-zA-Z]+";

        Matcher matcher =
Pattern.compile(regex).matcher(str);

        while (matcher.find())
{

            regex = matcher.group();

            System.out.println("test:" + regex);

        }

    }

"[a-zA-Z0-9][a-zA-Z0-9_\\-\\.]{0,19}@(?:[a-zA-Z0-9\\-]+\\.)+[a-zA-Z]+"

如:xf1-d@-1-.com.cn

(
? : exp ):
匹配exp,不捕获匹配的文本到自动命名的组,也不给此分组分配组号,也就不会让内存等着你再次访问。

匹配中文邮箱:(默认中文、英文字母、数字开头,不包含下划线,可包含中文,英文字母,数字,下划线(_),减号(-)和点(.))

String regex = "[\u4e00-\u9fa5a-zA-Z0-9][\u4e00-\u9fa5_a-zA-Z0-9\\-\\.]{0,19}@(?:[\u4e00-\u9fa5a-zA-Z0-9\\-]+\\.)+[\u4e00-\u9fa5a-zA-Z]+";

匹配结果:sd速度-x.f1-d@-1-.com.cn

中文、下划线、英文字母、数字:[\u4e00-\u9fa5_a-zA-Z0-9]

不要用 \w,他匹配的是包括下划线的任何单词字符。类似但不等价于“[
A-Za-z0-9_ ]”,这里的"单词"字符使用Unicode字符集,包括俄文等单词如а。

xf1-d@-1-.com.cn

[a-zA-Z0-9]

[a-zA-Z0-9_\\-.]

{1,19}

@

(

[a-zA-Z0-9\\-]

+

\\.

)+

[a-zA-Z]+
字母数字开头
字母,数字,下划线(_),减号(-)和点(.);

1

域名:字母、数字、连字符

1
域名间的点,需转义

1

域名后缀
- 需转义》 \- 》转义符也需转义 \\-
到19次


或 *
更多次

更多次
x f1-d @ -1- . cn
-1-.com.

 

时间: 2024-11-30 05:43:36

正则表达式匹配邮箱的相关文章

js 正则表达式匹配邮箱

例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z".+ 等价于 {1,}. {n,m} m 和 n 均为非负整数,其中n <= m.最少匹配 n 次且最多匹配 m 次.例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o.'o{0,1}' 等价于 'o?'.请注意在逗号和两个数之间不能有空格. Javascript 邮箱验证正则表达式示例  代码如下 复制代码 m

字符串-java正则表达式匹配数字

问题描述 java正则表达式匹配数字 G3811/ G3885/ G655/l G030/l G3849/ G0150/ G5292/ G955/l G025/l G5300/ 这是控制台输出的字符串,但是我只想要他的数字 怎么匹配 解决方案 Pattern p = Pattern.compile("[0-9]"); Matcher m = p.matcher(elem.attr("abs:href").substring(22, 28)); while (m.fi

正则表达式匹配(URL、电话、手机、邮箱)的实例代码

正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表通常被用来检索.替换那些符合某个模式(规则)的文本.下面通过实例代码给大家介绍正则表达式匹配(URL.电话.手机.邮箱)的实例代码,一起看看吧! 废话不多说了,直接给大家贴代码了,具体代码如下所示: <!DOCTYPE html> <html lang="en"> <head> <meta ch

几款正则表达式验证邮箱代码

在我们做网页时,经常会用到收集用户信息,我们就会碰到验证邮箱是吧,这里为了提供用户体验我们就会用js先作处理再用php教程,jsp教程,asp教程,.net等来处理.下面我们来看几款正则表达式验证邮箱代码吧. 验证邮箱代码一 function is_email($email) { return strlen($email) > 6 && preg_match("/^[w-.]+@[w-.]+(.w+)+$/", $email); } echo is_email($

Java正则表达式匹配电话格式_java

大家都知道,正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它用以描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配. /** * 手机号:目前全国有27种手机号段. * 移动有16个号段:134.135.136.137.138.139.147.150.151.152.157.158.159.182.187.188.其中147.157.188是3G号段,其

JAVA中正则表达式匹配,替换,查找,切割的方法_正则表达式

正则表达式的查找;主要是用到String类中的split(); String str; str.split();方法中传入按照什么规则截取,返回一个String数组 常见的截取规则: str.split("\\.")按照.来截取 str.split(" ")按照空格截取 str.split("cc+")按照c字符来截取,2个c或以上 str.split((1)\\.+)按照字符串中含有2个字符或以上的地方截取(1)表示分组为1 截取的例子; 按照

正则表达式匹配标签问题

问题描述 正则表达式匹配标签问题 <section> //此处为任何内容,会动态改变 </section> <table> //此处也为任何内容,会动态改变 </table> 以上内容以字符串形式复制给了变量str,我需要用正则从str中分别提取<section></section>和<table></table>之间的内容(包括section和table)赋值给str1和str2,我知道一般的正则方法,现在问

perl正则表达式匹配问题

问题描述 perl正则表达式匹配问题 10C 本人小白看不懂前辈写的perl正则表达式 m/=$/ 和 m/[=]/区别,这个要匹配的是哪两种情况 解决方案 后面的表达式是不是不完整 解决方案二: 正则表达式匹配问题perl正则表达式匹配正则表达式之匹配顺序问题 解决方案三: 本人小白看不懂前辈写的perl正则表达式 m/=$/ 和 m/[=]/区别,这个要匹配的是哪两种情况 前一个是匹配一个=号结尾的行,例如 abcdkjalsjfajsflajsfl=而后一个是匹配文本行中 包含 = 号的,

java正则表达式匹配斜杠

在正则表达式里面匹配一个斜杠,需要用4个斜杠: Java代码 import java.util.regex.Matcher; import java.util.regex.Pattern; public class test { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String textString = new String ("\\\&q