微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

正则表达式/正规表达式/常规表达式

正则表达式/正规表达式/常规表达式.
通俗地说,就是用一个模式字符串来判断给定的原始字符串是否符合某种规范–匹配(例如:是不是email地址,是不是11位的电话号码,
是不是网址….)
还有,可以从一大段文本中查找符合指定模式的字符串(例如,从网页文件中查找所有的email地址).
相关方法说明:
public boolean matches(String regex) 此字符串是否匹配给定的正则表达式
public String[ ] split(String regex) 根据给定正则表达式的匹配拆分此字符串
public String replaceAll(String regex,String replacement)
使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串

regex是正则表达式,前面的是返回值类型.全部都用字符串加点调用.replace是替换后的字符串.

* [abcde]        可以匹配a 或者  b  或者c   
         * [^abce]           不能是 或者  b 或者 c
         * [a-zA-z]          可以是 a-z或者是A-Z
         * [a-zA-Z_0-9]
         * \d               数字0-9
         * \D               非数字
         * \w               a-zA-Z_0-9
         * \W               不允许  出现 a-zA-Z_0-9
         * 
         * 数量词
         * ?        一次或者一次也没有
         * *         零次或多次
         * +         一次或者多次
         * {n}      恰好n次
         * {n,}      至少n次
         * {n,m}    至少n次  不超过m次

String str =”92374923874”;
//qq号以1-9开头,后面有4-14位数字
String regex =”[1-9]\d{4,14}”; //\d 数字:[0-9]
boolean boo = str.matches(regex);//验证qq号是否和正则表达式匹配
System.out.println(str+”:”+boo);
String ss = “door”;
String regex2 =”do?r”;//?前面的字符出现0-1次
boolean bo = ss.matches(regex2);
System.out.println(ss+”:”+bo);//false
String regex3 = “do.r”;// .表示一个任意字符
boolean bo3 = ss.matches(regex3);
System.out.println(ss+”:”+bo3);//true

//{4,14}是量词,表示前面的元素出现4(包含)到14(包含)次
//{n}前面的元素能且只能出现n次
//{n,}……..>=n次
//{,n}……..<=n次

Pattern p = Pattern.compile("a*b"); 
Matcher m = p.matcher("aaaaab"); 
boolean b = m.matches(); //判断是否完整匹配

在仅使用一次正则表达式时,可以方便地通过Pattern类的 compile方法来编译表达式并在单个调用中将输入序列与其匹配。如果完全匹配,则返回true:

boolean b = Pattern.matches(“a*b”,“aaaab”);

等效于上面的三个语句,尽管对于重复的匹配而言它效率不高,因为它不允许重用已编译的模式。
Pattern p = Pattern.compile(“W(o.)(ld!)”); //第0组是整个模式串,第1组是第一个()中的内容,第2组是第二个()中的内容
Matcher m = p.matcher(“Hello,Wo6ld! Wo8ld! in Java.”);

Pattern p = Pattern.compile("W(o.)(ld!)"); //第0组是整个模式串,第2组是第二个()中的内容
        Matcher m = p.matcher("Hello,Wo6ld!4s56d4f65Wo8ld!156465 in Java."); 
        while(m.find()){//判断能不能找到下一个匹配
            String s = m.group();//等价于m.group(0)
            System.out.println(s);
            int startIndex = m.start(0);//当前匹配串的第0组的起始下标
            int endindex = m.end(0);//当前匹配串的第0组的起始下标(不含)
            System.out.println("group(0)的起始下标"+startIndex);
            System.out.println("group(0)的结束下标"+endindex);
        }

Matcher类的方法:
public boolean find()查找下一个匹配
public String group()//等效于group(0) 整组匹配
public int start(int)当前匹配的中的某组的起始下标
public int end(int)当前匹配的中的某组的结束下标(不含)String

查找e-mail
String content = "a;jfd;salkjfd===zhangsan@vip.sina.com.cn------lisi@sohu.com[][][sfsad";
Pattern p = Pattern.compile("\\w+@\\w+(\\.\\w+)+");
Matcher matcher2 = p.matcher(content);//声明的形参类型是CharSequence接口类型,实际传入的是String实现类对象
while(matcher2.find()){
    System.out.println(matcher2.group());
}

原文地址:https://www.jb51.cc/regex/357486.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐