正则表达式

正则表达式

正则表达式是用来描述具有一定特征的字符串的特殊字符串。例如"ab*“匹配"a 若干个b”,"a,ab,abb"等均可匹配。

1. 字符类

1.1 自定义字符类

由[ ]组,只匹配一个,需要注意以下四个:

  • ^:如果在第一个位置,表示取反的含义
  • -:表示一个区间即范围
  • ]:结束 ,如果要表示普通的]请加 \
  • \:转义
  • .:单独表示.自身,如果想表示任意字符加上\

例:

[ae134]->ae134
[(as)]->as
[a-z]->a~z之间的小写字母
[-\]a-z\[]->-[]及小写字母

1.2 标准字符类

字符含义字符含义
\d0~9的数字\D\d取反
\wA~Z a~z 0~9\W\w取反
\s空格,制表符,换行符\S\s取反

1.3 贪婪模式

在匹配次数不定时如*,{n,},+匹配字符越多越好,默认模式即贪婪模式。

  • 贪婪模式greedy(匹配字符越多越好,可回溯)
  • ?懒惰模式lazy reluctant(匹配字符越少越好,可回溯)
  • +独占模式possessive(匹配字符越多越好,不可回溯)

1.4 边界

边界不占用宽度,只是一个界限。

  • ^:多行代表每行头,单行代表整个字符串的开始
  • $:多行代表每行尾,单行代表字符串的结尾
  • \b:匹配前面或后面的不是\w
  • \B:匹配前面或后面的是\w

1.5 选择符和分组

选择符|:

he|hello –>只匹配he,不匹配hello
hello|he->匹配he与hello

分组():

匹配 ab c -> ab|c
匹配 ab ac -> a(b|c)
只匹配 get -> \bget\b
匹配 get 和 getValue -> getvalue|get
get(value)?
获取 and or -> \band\b|\bor\b \b(and|or)\b

1.6 零宽断言

  • (?=exp):先行断言,断言自身出现的位置的后面能匹配表达式exp
  • (?<=exp):后发断言,断言自身出现位置的前面能匹配表达式exp
  • (?!exp):断言此位置的后面不能匹配表达式exp
  • (?<!exp):断言此位置的前面不能匹配表达式exp

2. 常用类

2.1 Matcher

代码:

public class RegularDemo01 {
    public static void main(String[] args) {
        String str = "(\\d+)hahaha";
        //转成正则表达式
        Pattern p = Pattern.compile(str);
        //匹配
        Matcher m = p.matcher("abchahaha");
        //是否匹配
        System.out.println(m.find());//false
        m = p.matcher("11hahaha");
        System.out.println(m.find());//true
        str = "((\\d+)(hahaha))";
        p = Pattern.compile(str);
        m = p.matcher("11hahaha22hahaha");
        //获取匹配的字符串
        while(m.find()){
            //组
            System.out.println(m.groupCount()+"-->"+m.group()+"-->"+m.group(0));
            //0-->整个表达式
            //从 1 开始获取
            System.out.println(m.group(2)+"-->"+m.group(3));
        }
    }
}

2.2 字符串与正则

代码:

public class RegularDemo02 {
    public static void main(String[] args) {
        String str ="and";
        //完全匹配
        boolean flag =str.matches("\\b(and|or)\\b");
        System.out.println(flag);//true
        str="\"happy\" and \"regex\" \"baidu\" or\"google\"";
        //替换所有
        str =str.replaceAll("\\b(and|or)\\b", "-->");
        System.out.println(str);//"happy" --> "regex" "baidu" -->"google"
        //分割
        str="\"happy\" and \"regex\" \"baidu\" or\"google\"";
        //切割
        String[] arr=str.split("\\b(and|or)\\b");
        for(String temp:arr){
            System.out.println(temp);
        }
        arr=str.split("m");
        //没有对应的,返回本身
        for(String temp:arr){
            System.out.println(temp);
        }
        //任意字符
        str ="192.168.1.234";
        arr=str.split("\\.");
        //注意转义
        for(String temp:arr){
            System.out.println(temp);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值