正则表达式

package com.javaxxz.test;

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

/**
 * 正则表达式
 *
 * 1、预定义字符类
 *  . 任何字符
 * \d 数字:[0-9]
 * \D 非数字:[^0-9]
 * \s 空白字符:[\t\n\x0B\f\r]
 * \S 非空白字符:[^\s]
 * \w 单词字符:[a-zA-Z_0-9]
 * \W 非单词字符:[^\w]
 * 注意:任何预定义字符没有加上数量词之前都只能匹配一个字符而已
 *
 * 2、数量词
 * X? X,零次或一次
 * X* X,零次或多次
 * X+ X,一次或多次
 * X{n} X,恰好n次
 * X{n,} X,至少n次
 * X{n,m} X,至少n次,但不超过m次
 *
 * 3、范围词
 * [abc] a、b或c
 * [^abc] 任何字符,除了a、b或c(否定)
 * [a-zA-Z] a到z 或 A到Z
 * 注意:范围词里面不管内容有多长,没有数量词的配合都只能匹配一个字符而已
 *
 * 4、边界匹配器
 * \b 单词边界匹配器只是代表了单词的开始或者是结束部分,不匹配任何的字符
 *
 * 5、正则表达式主要用于操作字符串,正则表达式对字符串的操作主要有一下几种应用
 *  匹配 matches()
 *        // 匹配固定电话 区号-主机号 区号:首位是0 长度3-4位 主机号:首位不能是0 长度7-8位
 *       "021-5327015".matches("0\\d{2,3}-[1-9]\\d{6,7}")
 *  切割 split
 *       // 根据重叠词进行切割  [大,明,玩,开心]
 *       "大家家家明天天玩得得得得得开心".split("(.)\\1+")
 *       注意:如果正则的内容需要被复用,那么需要对正则的内容进行分组,分组的目的就是为了提高正则的复用性。
 *       组号不能指定,组号是从1开始的
 *       如:((A)(B(C)))
 *           第1组:((A)(B(C)))
 *           第2组:(A)
 *           第3组:(B(C)
 *           第4组:(C)
 *           \1:引用第1组所匹配的内容
 *  替换 replaceAll(String regex, String replacement)
 *        "你好123先生456".replaceAll("\\d+","**")
 *        结果: 你好**先生**
 *
 *        String str = "我我我要要要做做项项项目目目"; //输出:我要做项目
 *        str.replaceAll("(.)\\1+","$1")
 *        如果要在replaceAll方法正则的外部引用组的内容,那么是使用"$组号"
 *  查找 查找需要使用的对象:
 *      1、Pattern(正则对象)
 *      2、Matcher(匹配器对象)
 *      如:Pattern p = Pattern.compile("a*b");
 *          Matcher m = p.matcher("aaab");
 *          boolean b = m.matches();
 *      匹配器要使用的方法:
 *          1、find() 通知匹配器去匹配字符串,查找符合规则的字符串
 *          2、group() 获取符合规则的子串
 *          注意:使用group方法的时候一定要先调用find方法,
 *                让匹配器去查找符合规则的字符串,否则报错。
 */
public class Demo7 {
    public static void main(String[] args) {
        // 找出3个字母组成的单词
        String str = "da jia de jia qi wan bi liao hai kai xin ma";
        String reg = "\\b[a-zA-Z]{3}\\b";
        // 根据正则编译成Pattern对象
        Pattern p = Pattern.compile(reg);
        Matcher m = p.matcher(str);
        while (m.find()) {
            System.out.print(m.group() + ",");
        }
        // 输出结果 jia,jia,wan,hai,kai,xin,
    }
}

 

转载于:https://my.oschina.net/zhui666/blog/1800664

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值