Java正则表达式(一般其他语言也适用)

概述(Regex)

专门用来操作字符串的技术,而且可以简化代码,用于字符串的复杂操作(底层为代码,但是表现形式简洁)

弊端

符号越多,阅读性越差(所以学习正则要先学一些符号)

正则表达式的符号

符号

说明

[]

判断字符位上的内容(里面可以使用[] -) 一个范围

预定义字符

.

任意字符

\d

数字,[0-9]

\D

非数字,[^0-9]

\s

空白字符,[ \t\n\x0B\f\r]

\S

非空白字符,[^\s]

\w

单词字符,[a-zA-Z_0-9]

\W

非单词字符,[^\w]

数量词

X?

表示X出现的次数没有或只有一次(一次或一次也没有)

X*

表示X出现的次数没有或有多次(有无均可)

X+

表示X出现的次数有一次或多次(一次及以上)

X{n}

表示X恰巧出现n次

X{n,}

表示X出现的次数为n次或n次以上

X{n,m}

表示X出现的次数为n次以上且m次以下

边界字符

^

行开头

$

行结尾

\b

单词边界

在正则中\表示转义,所以想要使用普通的字符但是该字符在正则中有特殊含义,需要使用转义,即\\,将正则表达式中的字符转为普通的字符,如单词边界为\b,在字符串内应写为\\b(其中\\表示为普通字符\)

正则对字符串的常规操作

匹配

使用的方法为 matches方法 匹配结果为boolean

切割(在正则中"."(任意字符)当切割符,结果为空)

使用的方法为 split方法 切割结果为String[]

替换

概述

使用的方法为替换方法 替换结果为String
replaceAll方法(regex,str)替换通过regex转换后的全部字符串为str字符串
replaceFirst方法(regex,str)替换通过regex判断的第一个字符为str字符串

实例

  1. 将叠词替换成$

String str = "mifjfiejjjjfjiweojwaaafe";
String regex = "(.)\\1+";
str = str.replaceAll(regex,"\\$");//结果为:mifjfie$fjiweojw$fe

  1. 将叠词替换成相同的一个字符

String regex = "(.)\\1+";
str = str.replaceAll(regex,"$1");//结果为:mifjfiejfjiweojwafe

  1. 将手机号中间四位隐藏

String str = "18679076847";
String regex = "(\\d{3})\\d{4}(\\d{4})";
str = str.replaceAll(regex,"$1****$2");//结果为:186****6847

  1. 将帖子中的私人信息隐藏为***

String str = "我的qq是:3226301541;电话号码是:18679076847";
String regex = "\\d{4,}";
str = str.replaceAll(regex,"***");
System.out.println(str);//结果为:我的qq是:***;电话号码是:***

获取

正则表达式类与匹配器

使用场景

正则表达式为类Pattern ,使用了正则方法的底层都使用了正则对象中的功能,String中没有解决方法时,可以使用Pattern对象

Matcher 为匹配器

必须首先将正则表达式(指定为字符串)编译为此类的实例

然后将所得的图案可以被用来创建一个Matcher对象可以匹配任意character sequences针对正则表达式

执行匹配的所有状态都驻留在匹配器中,所以许多匹配者可以共享相同的模式

Pattern(正则表达式在Java中的表现形式) 使用方法

  1. 将正则表达式字符串编译成正则对象Pattern
  2. 通过Pattern对象获取Matcher对象(匹配器对象)
  3. 通过匹配器对象对字符串进行规则的匹配,结果都在匹配器中
  4. 通过匹配器对象中的功能获取结果
    规范代码:
    Pattern p = Pattern.compile("a*b");//把正则编译成对象
    Matcher m = p.matcher("aaaaab");//通过对象获取匹配器,通过匹配器将规则和字符串进行匹配
    boolean b = m.matches();

Matcher匹配器的创建(三种方式)

  • matches方法尝试将整个输入序列与模式进行匹配(匹配整个)
  • lookingAt方法尝试将起始于输入序列的输入序列与模式进行匹配(从头开始)
  • find方法扫描输入序列,寻找匹配模式的下一个子序列(可以匹配下一个)

Matcher匹配器中常用方法介绍

方法

说明

group方法

返回在上一次匹配操作期间由给定组捕获的输入子序列

start方法

返回上一个匹配的起始索引

end方法

返回最后一个字符匹配后的偏移量

find方法

尝试找到匹配模式的输入序列的下一个子序列

实例

//将字符串中含有三个单词的字符串提取出来

String str = "da jia zhu yi le ming tian fang jia le";

//String regex = "[a-zA-Z]{3}";//结果为jia zhu min tia fan jia,所以需要加边界

String regex = "\\b[a-zA-Z]{3}\\b";//结果为jia zhu jia

//获取正则表达式对象

Pattern p = Pattern.compile(regex);

//和操作字符串相关联,获取对应的匹配器对象

Matcher m = p.matcher(str);

//find方法

while(m.find()) {

//group方法,返回上一次匹配成功的字符串

//start方法:匹配规则前角标位

//end方法:匹配方法后角标位

System.out.println(m.group());

//System.out.println(str.substring(m.start(),m.end()));//与使用group效果一样

}

正则规则的复用

  1. 先封装
  2. 用小括号完成,封装完后有编号,编号从1开始
  3. 规则中被()封装的称为组,直接通过编号可以调动对应的组 , 编号需要通过转义符号转义
    如:\\1使用已有组的第一组的内容,原则:先有组,才可以使用对应的编号(组0始终代表整个表达式)
  4. 在参数列表中,其他参数要使用之前参数中规则的组,需要使用$+组编号 \\n只能使用在正则表达式中

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值