Java 正则表达式

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑

给定一个正则表达式和另一个字符串,我们可以达到如下的目的:

  1. 给定的字符串是否符合正则表达式过滤逻辑(称作"匹配");

  2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。
    正则表达式的特点是:

  3. 灵活性逻辑性功能性非常的强;

  4. 可以迅速地用极简单的方式达到字符串的复杂控制

  5. 对于刚接触的人来说,比较晦涩难懂。
    注意:正则表达式写好后,没有错对之分,返回结果只是true和false

校验QQ号,要求:必须是5~15位数字,0不能开头。没有正则表达式之前

public class regex {
    public static void main(String[] args) {
        checkQQ("0123134");
    }
    public static void checkQQ(String qq)
    {
        int len = qq.length();
        if(len>=5 && len <=15)
        {
            if(!qq.startsWith("0"))
            {
                try
                {
                    long l = Long.parseLong(qq);
                    System.out.println("qq:"+l);
                }        
                catch (NumberFormatException e)
                {
                    System.out.println("出现非法字符");
                }
            }
            else
                System.out.println("不可以0开头");
        }
        else
            System.out.println("QQ号长度错误");
        }
}

使用正则表达式之后的代码:

public class regex {
    public static void main(String[] args) {
            checkQQ2("0123134");
    }
    public static void checkQQ2(String qq) {                                                            
            String reg = "[1-9][0-9]{4,14}";                  
            System.out.println(qq.matches(reg)?"合法qq":"非法qq");                                 
    }
}

关于小括号分组,之前看马士兵视频的时候学到的,数左小括号"(",第几个就是第几组,可以将前面指定括号的规则在后面复用:

//小括号分组:数左边的小括号第几个就是第几组
Pattern p = Pattern.compile("(\\d{2})([a-z]{2,3})");
Matcher m =p.matcher("33aa-32sdy-29ssc");
while(m.find()) {
   System.out.println(m.group(2));//每次匹配获取第二组内容
}
/*
结果:
aa
sdy
ssc
*/

//向前引用:
Pattern p = Pattern.compile("(\\d(\\d))\\2");
 Matcher matcher = p.matcher("211");
 System.out.println(matcher.matches());
//结果:true
//解释:"\\2"代表引用前面的第2组匹配的值

matcher.appendReplacement(sb, replaceContent); 与 matcher.appendTail(sb);

appendReplacement 方法:sb 是一个 StringBufferreplaceContext 待替换的字符串,这个方法会把匹配到的内容替换为 replaceContext,并且把从上次替换的位置到这次替换位置之间的字符串也拿到,然后,加上这次替换后的结果一起追加到 StringBuffer 里(假如这次替换是第一次替换,那就是只追加替换后的字符串啦)。
appendTail 方法:sb 是一个 StringBuffer,这个方法是把最后一次匹配到内容之后的字符串追加到 StringBuffer 中。
两个方法一起使用就可以达到所有替换或者替换第一个:

所有替换:

while(m.find()){  
    m.appendReplacement(sb,replaceContext);  
}  
.appendTail(sb);

替换第一个:

if (matcher.find()){  
    matcher.appendReplacement(sb, replaceContext);  
}  
matcher.appendTail(sb);

使用正则表达式查找字符串中数字出现的位置:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PrimitiveTypeTest {
    //查找数字,返回位置 
    private static final String regex ="\\d+";
    private static final String input ="0 cat catt catre cat cat 9";
    public static void main(String[] Args) {
        Pattern p =Pattern.compile(regex);
        Matcher q =p.matcher(input);
        int count=0;
        while(q.find()) {
            count++;
            System.out.println("match number"+count);
            System.out.println("start()"+q.start());
            System.out.println("end()"+q.end());
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值