正则表达式(匹配、切割、替换、获取)

(1)正则表达式简介

  • 作用:用于专门操作字符串。
  • 特点:用一些特定的符号来表示一些代码操作,简化书写。
  • 好处:可以简化对字符串的复杂操作。
  • 弊端:符号定义越多,正则越长,阅读性越差。

正则表达式:定义了字符串的模式,是符合一定规则的表达式。 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。

(2)具体操作功能

1.匹配 :String matches 方法

1.字符类

1.[abc] 校检一个位置上的字符∈[abc].只能是a或b或c
2.[^abc] 校验一个位置上字符不∈[abc].不是a或b或c (否定)
3.[a-zA-Z] a-z或A-Z (范围)
4.[a-d[m-p]] a-d或m-p (并集)
5.[a-z&&[def]] d,e或f (交集)
6.[a-z&&[^bc] a到z,除了b和c (减去)
7.[a-z&&[^m-p]] a到z,除了m-p (减去)

	@Test
	public void test1(){
		String str ="az";
		String v ="[abcd][a-z]";
		boolean ans = str.matches(v);
		System.out.println(ans);
	}

2.预定义字符类

1.. 任何字符
2.\d 数字
3.\D 非数字
4.\s 空白字符
5.\S 非空白字符
6.\w 单词字符(数字字母下划线均可)
7.\W 非单词字符

		String str ="a67";
		String v ="[abcd].\\d";
		boolean ans = str.matches(v);
		System.out.println(ans);

3.数量词

1.X? 一次或一次也没有
2.X* 零次或多次
3.X+ 一次或多次
4.X{n} 恰好n次
5.X{n,} 至少n次
6.X{n,m} 至少n次,但不超过m次

	@Test//判断是否是电话号
	public void checkTel()
	{
		String tel1 = "13721876401";
		String v = "1[358]\\d{9}";
		System.out.println(tel1.matches(v));
	}

2.切割:String split 方法

1.切空格

	@Test
	public void test()
	{
		//切空格
		String str = "zhangsan   lisi   wangwu";
		String v = " +";//'+'代表一个或多个
		String[] ans = str.split(v);
		for(String s : ans){
			System.out.println(s);
		}
	}

2.切叠词

	@Test
	public void test2(){	
		//切叠词
		String str = "abccdeqqqqquizzos";
		String v = "(.)\\1+";
		String[] ans = str.split(v);
		for(String s : ans){
			System.out.println(s);
		}		
	}

3.组合捕获

在上面切叠词中,为了让规则的结果被重用。可以将规则封装成一个组.用()完成,组的出现都有编号。从1开始,想要使用已有的组可以通过\n(n就是组的编号)的形式来获取.

捕获组可以通过从左到有计算左括号.如((A)(B(C)))有四组
1 ((A)(B(C)))
2 \A
3 (B(C))
4 (C)

3.替换:replaceAll方法
将字符串中n个数替换成"#".
将重叠的字符替换成单个字符.zzzz–>z

package Regular正则表达式;

import org.junit.Test;

public class Replace替换 {

	public static void main(String[] args) {

		// 将字符串中n个数替换成"#".
		String str = "abc123444acd4545aa9";
		myreplace(str, "\\d{1,}", "#");

		String str2 = "aaqwebb1123ccc";
		// 将重叠的字符替换成单个字符.zzzz-->z
		myreplace(str2, "(.)\\1+", "$1");
		
	}
	private static void myreplace(String str, String olds, String news) {
		str = str.replaceAll(olds, news);
		System.out.println(str);
	}
}

4.获取 (封装–>匹配–>关联–>获取)

操作步骤:

  • 1.将正则表达式封装成对象。
  • 2.让正则对象和要操作的字符串相匹配。
  • 3.关联后,获取正则匹配引擎。
  • 4.通过引擎对符合规则的子串进行操作。

获取三个字母组成的单词:

package Regular正则表达式;

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

public class 获取 {
	public static void main(String[] args) {
		String str = "qiao bi luo dian xia ,cxk .";
		String v = "\\b[a-z]{3}\\b";
		// 1.将正则封装成对象
		Pattern p = Pattern.compile(v);

		// 2.让正则对象和要作用的字符串相关联,获取匹配器对象
		Matcher m = p.matcher(str);

		// 其实String类中的matches方法,就是用Pattern和Matcher对象完成的
		// 只不过被String的方法封装后,用起来较为简单,但是功能单一.
		// System.out.println(m.matches());

		// boolean b = m.find();// 将规则作用到字符串上,并进行符合规则的子串查找.
		// System.out.println(b);
		// System.out.println(m.group());

		// 3.先find再group
		while (m.find()) {
			System.out.println(m.group());
			System.out.println(m.start() + "...." + m.end());// 获取子串索引位置
		}
	}
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hudie.

不要打赏!不要打赏!不要打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值