Java基础正则表达

 正则表达式(Regex)

符合某种规则的字符串.(一种规则,有自己特殊的规则.)

最多用途:数据的校验.

匹配功能(掌握)

使用String类中的matches方法

字符

1) X          字符X

2) \\         反斜线

3) \r         回车

4)\n         换行

 

字符类

1) [abc]         a,b或者c 一次一个

2) [^abc]         非abc,除了a,b,c

3) [a-zA-z]         a-z或者A-Z,两头的字母包含在内(范围)

4) [0-9]         0-9的字符

 

预定义字符类

1) .         任何字符

2) \\d         数字[0-9]

3) \\D         非数字

4) \\s         空白字符

5) \\S         非空白字符

6) \\w         单词字符:[a-zA-Z_0-9]

单词字符:在\\w里面包含的内容都是单词字符.

7) \\W         非单词字符

 

边界匹配器

1) ^         行开头

2) $         行结尾   ^[a-z]{3}$

3) \\b         单词边界(这个地方不能是单词)

\b[a-z]{3}\b匹配三个字符的字母

只要长度和字符都满足,不加边界默认全部识别

[abc]默认匹配一次

 

数量词

X               一次或一次也没有[a-z]?

X*                 零次或多次[a-z]*

X+                 一次或者多次[a-z]+

X{n}             恰好n次[a-z]{3}

X{n,}                至少一次

X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次

组和捕获

捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组:

 

1 ((A)(B(C)))
2 \A
3 (B(C))
4 (C)


//------------------需求校验手机号码格式------------------

//定义控制台输入

Scanner sc = new Scanner(System.in);

//提示信息

System.out.print("请输入:");

//接收控制台输入

String str = sc.nextLine();

//定义正则表达式

String regex = "1[35]\\d{9}";

//判断是否符合规则

boolean flag = str.matches(regex);

//打印判断结果

System.out.println("flag:"+flag);


//------------------需求:校验邮箱格式实例------------------

//封装控制台输入

Scanner sc = new Scanner(System.in);

//提示信息

System.out.print("请输入:");

//字符串接收输入信息

String str = sc.nextLine();

//定义正则表达式

String regex = "\\w+@\\w+(\\.\\w+)+";

//判断是否有符合规则,并返回boolean值

boolean flag = str.matches(regex);

//输出判断结果

System.out.println("flag:"+flag);

切割功能

public String[] split(String str)

基本切割:

//------------------需求:取出空格,.\\符号------------------

//定义字符串

String str = "aa   ,,..       \\bb     ,,..     \\cc";

//定义正则表达式

String regex = " +,+\\.+ +\\\\";

//切割后使用字符串数组接收

String[] flag = str.split(regex);

//增强for循环遍历数组

for (String s:flag){

System.out.print(s);

}

叠词切割

同一个字符出现2次以上就被称为叠词

叠词规则:

1) 左边的字符和右边一致并出现1次以上

2) 通过编号获取,编号从1开始

3) 编号必须添加反斜线转义字符\\


//------------------需求:切割重复的单词------------------

//定义字符串

String str = "adsssnfejjjjjadw";

//定义正则表达式

String regex = "(.)\\1+";

//切割处理,字符串数组接收

String[] flag = str.split(regex);

//遍历数组

for(String s:flag){

System.out.print(s);

}

替换功能

使用String类中的replaceAll方法

 

//------------------需求:替换字符串中叠词为#------------------

//定义字符串

String str = "asd1111sdddfwf8888mshhhdsa";

//定义正则表达式

String regex = "(.)\\1+";

//replaceAll方法替换匹配规则的字符串

String s = str.replaceAll(regex, "#");

区别:

(.)\\1+: 表示叠词的切割.

(.)\\1+ , $1:表示右边引用左边组中的第一组内容.

 

//------------------需求:删除多余的字符串,保留一位,如asddewrre,替换为asdewre------

//定义字符串

String str = "asd1111sdddfwf8888mshhhdsa";

//定义正则表达式

String regex = "(.)\\1+";

//replaceAll方法替换匹配规则的字符串,保留一位

String s = str.replaceAll(regex, "$1");

 

需求:替换字符串中的字符为*

//创建字符串

String str = "asdqwe123124435dsadsadsa";

//定义正则表达式

String regex = "\\d";

//替换数字为*

String s = str.replaceAll(regex, "*");

 

获取功能

使用的是正则对象Pattern和匹配器

 

模式对象,也就是把正则表达式进行编译生成的一个对象

Pattern p = Pattern.compile("a*b");

调用模式对象的matcher方法,返回一个Matcher对象,匹配器对象

这个时候匹配器对象由模式对象接受实际数据产生的

Matcher m =p.Matcher("aaa");

调用匹配器对象的判断方法matches(),返回boolean类型

Boolean b =m.matches();

 

Matcher方法:

boolean find():查找有没有和模式匹配的字符串.

String group():返回查找到的字符串.

//------------------需求:获取3个字母的单词------------------

//创建字符串

String str = "ming tian fang jia ,dan shi yao shang ke";

//定义正则表达式

String regex = "\\b\\w{3}\\b";

//把正则表达式编译生成一个编译模式

Pattern pat = Pattern.compile(regex);

//根据模式和实际的参数生成一个匹配器对象

Matcher mat = pat.matcher(str);

//调用匹配器对象的功能判断有没有和模式匹配的字符串

while(mat.find()){

//group()返回匹配的字符串

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

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值