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

正则表达式/正规表达式/常规表达式.
通俗地说,就是用一个模式字符串来判断给定的原始字符串是否符合某种规范–匹配(例如:是不是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组是整个模式串,第1组是第一个()中的内容,第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());
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值