正则表达式

常用的正则表达式符号

1. 字符类

表达式说明
[abc]a、b 或 c(简单类)
[^abc]任何字符,除了 a、b 或 c(否定)
[a-zA-Z]a 到 z 或 A 到 Z,两头的字母包括在内(范围)
[a-d[m-p]]a 到 d 或 m 到 p:[a-dm-p](并集)
[a-z&&[def]]d、e 或 f(交集)
[a-z&&[^bc]]a 到 z,除了 b 和 c:[ad-z](减去)
[a-z&&[^m-p]]a 到 z,除了 m到p:[a-lq-z](减去)

2. 预定义字符类

  • 预定义字符就是拿这些符号当字符
表达式说明
.任何字符(与行结束符可能匹配也可能不匹配)
\d数字:[0-9]
\D非数字: [^0-9]
\s空白字符:[ \t\n\x0B\f\r]
\S非空白字符:[^\s]
\w单词字符:[a-zA-Z_0-9]
\W非单词字符:[^\w]

3. 边界匹配器

  • 限定位置
表达式说明
^行的开头
$行的结尾
\b单词边界 就是此词的起始和末尾有分隔符。
\B非单词边界
\A输入的开头
\G上一个匹配的结尾
\Z输入的结尾,仅用于最后的结束符(如果有的话)
\z输入的结尾

4. Greedy 数量词

  • X代表前面的字符或者表达式
表达式说明
X?X,1次或0次
X*X,0次或n次
X+X,1次或n次
X{n}X,恰好 n 次
X{n,}X,至少 n 次
X{n,m}X,至少 n 次,但是不超过 m 次

5. 组

表达式说明
(X)把括号内的规则分成一个组,每个组都有一个编号,从1开始

组示例:

	@Test
    public void regTest() {
        //根据叠词切割(tttmmmm)
        String str = "zhangsanttttxiaoqiangmmmmmmzhaoliu";
        //解释:()为分组, .为任意字符, 1代表组的编号, +一个或多个
        //总体解释是:以任意字符为一个编号为1的组,匹配他一个或多个
        String[] names = str.split("(.)\\1+");
        for (String name : names) {
            System.out.println(name);
        }
    }

正则表达式对字符串的常见操作:

  1. 匹配。
    其实使用的就是String类中的matches方法。

  2. 切割。
    其实使用的就是String类中的split方法。

  3. 替换。
    其实使用的就是String类中的replaceAll()方法。

  4. 获取。

String中的正则方法

返回值方法名称说明
booleanmatches(String regex)查看某一串与正则表达式的规则是否匹配,匹配为true,否false
String[]split(String regex)根据给定正则表达式的匹配拆分此字符串。
StringreplaceAll(String regex, String replacement)如果某一串中的子串与正则表达式匹配,则替换新元素。
StringreplaceFirst(String regex, String replacement)使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。

用正则表达式进行字符串的获取

  1. 将正则规则进行对象的封装。
    Pattern p = Pattern.compile("a*b");
    通过正则对象的matcher方法字符串相关联。获取要对字符串操作的匹配器对象Matcher .
    Matcher m = p.matcher("aaaaab");
    通过Matcher匹配器对象的方法对字符串进行操作。
    boolean b = m.matches();
	@Test
    public void test5() {
        String str = "da jia hao,ming tian bu fang jia!";
        String regex = "\\b[a-z]{3}\\b";
        //1,将正则封装成对象。
        Pattern p = Pattern.compile(regex);
        //2, 通过正则对象获取匹配器对象。 
        Matcher m = p.matcher(str);

        //使用Matcher对象的方法对字符串进行操作。
        //既然要获取三个字母组成的单词 
        //查找。 find();
        System.out.println(str);
        //使用循环,查找一个,返回值一个......
        while (m.find()) {
            System.out.println(m.group());//获取匹配的子序列
            System.out.println(m.start() + ":" + m.end());
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值