JAVA------正则表达式详解

目录

一.概念

二.正则的写法

字符

字符类

预定义字符类

边界匹配器

Greedy 数量词    

运算符 

三.正则的应用

1.匹配字符串

2.分割字符串

3.替换字符串

正则表达式的组

4.获取字符串

四.正则表达式的总结

1.正则表达式的组成:

2.正则表达式的常见应用,有字符串的匹配、切割、替换和获取;


一.概念

正则表达式是对字符串操作的一种逻辑公式。就是用事先定义好的一些特定字符、及这些特定字符的组合,
组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
对于初学者,可以简单的理解为一类特殊的字符串

二.正则的写法

字符

    x 字符 x。举例:'a'表示字符a
    \\ 反斜线字符。
    \n 新行(换行)符 ('\u000A') 
    \r 回车符 ('\u000D')
    

字符类

    [abc] a、b 或 c(简单类) 
    [^abc] 任何字符,除了 a、b 或 c(否定) 
    [a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围) 
    [0-9] 0到9的字符都包括

	/**
	 *@function  单个字符的验证
	 */
	void regex() {
		String regex = "[abc]";//表示只能匹配一个在它里面的字符
		boolean b1 = "d".matches(regex);
		System.out.println(b1);
		String regex2 = "[^123]";//表示只能匹配一个不在它里面的字符
		boolean b2 = "5".matches(regex2);
		System.out.println(b2);
		String regex3 = "[1-9A-Z]";//表示匹配一个在所示范围内的字符
		boolean b3 = "M".matches(regex3);
		System.out.println(b3);
		String regex4 = "[M-T&&[A-Z]]";//表示匹配一个在所示两个范围的交集内的字符
		boolean b4 = "B".matches(regex4);
		System.out.println(b4);
	}


    

预定义字符类

    . 任何字符。我的就是.字符本身,怎么表示呢? \.
    \d 数字:[0-9]
    \D 非数字:[^\d]/[^0-9]
    \w 单词字符:[a-zA-Z_0-9]
 \W 非字符[^\w]

	/**
	 *@function  预定义字符的验证
	 */
	void regex() {
		String regex = ".";//表示匹配一个任意字符
		boolean b = " ".matches(regex);
		System.out.println(b);
		
		String regex1 = "\\d";//表示匹配一个数字字符
		boolean b1 = "0".matches(regex1);
		System.out.println(b1);
		
		String regex2 = "\\D";//表示匹配一个非数字字符
		boolean b2 = " ".matches(regex2);
		System.out.println(b2);
	}

边界匹配器

    ^ 行的开头 
    $ 行的结尾 
    \b 单词边界, 就是不是单词字符的地方。
    

Greedy 数量词    

    X?            X,一次或一次也没有
    X*             X,零次或多次
    X+            X,一次或多次
    X{n}          X,恰好 n 次 
    X{n,}         X,至少 n 次 
    X{n,m}      X,至少 n 次,但是不超过 m 次  

运算符 

  XY    X后跟 Y 
  X|Y   X 或 Y 
  (X)   X,作为捕获组


三.正则的应用

1.匹配字符串

	/**
	 *@function 验证手机号是否合法
	 *1、号码是11位数字;
	 *2、号码只能以1开头[1]
	 *3、号码的第二位可以是:3,4,5,7,8  [34578]
	 *4、从第三位开始后面的数字都可以是0到9的任意数字\\d{9}
	 */
	void regex() {
		//1.定义字符串
		String str = "18545624879";
		//2.定义正则式
		String regex="1[34578]\\d{9}";
		//3.判断是否合法,若合法打印"合法",否则"不合法"
		if(str.matches(regex)) System.out.println("合法");
		else System.out.println("不合法");
	}

2.分割字符串

	/**
	 *@function 通过 ',' 分割字符串
	 */
	void regex() {
		//1.定义字符串
		String str = "露娜:18545624879,凯:154789541236,诸葛亮:15236548745";
		//2.分割并打印
		String[] str1=str.split(",");
		for (String string : str1) {
			System.out.println(string);
		}
	}

3.替换字符串

	/**
	 *@function 替换手机号的中间4位
	 */
	void regex() {
		//1.定义字符串
		String str = "露娜:18545624879,凯:154789541236,诸葛亮:15236548745";
		//2.定义手机号的正则式
		String regex="([\\d]{3})([\\d]{4})([\\d]{4})";
		//3.替换手机号中间4位并打印
		String str1=str.replaceAll(regex, "$1****$3");
		System.out.println(str1);
	}

正则表达式的组

如果多次使用相同的匹配规则,就可以将这个规则定义为一个组,再在后面通过组号调用,\\1;
正则中的组,就是使用英文的小括号括起来的一段规则;一个括号就是一个组;
((a)(b(c))):    
1:((a)(b(c)))
2:(a)
3:(b(c))
4:(c)

4.获取字符串

通过正则表达式获取字符串中匹配的子串的步骤:
1、通过正则规则和compile 函数创建Patter类的实例对象;
2、根据创建的Patter对象和要匹配的字符串创建匹配器对象(Matcher类的实例对象);
3、通过匹配器对象的find方法判断是否有匹配对象;如果有,使用group方法获取匹配的子串;

	/**
	 *@function 通过正则获取字符串
	 */
	void regex() {
		String str = "露娜:18545624879,凯:154789541236,诸葛亮:15236548745";
		String regex="([\\d]{3})([\\d]{4})([\\d]{4})";
		//1.通过正则式和compile 函数创建Patter类的实例对象
		Pattern p=Pattern.compile(regex);
		//2.根据创建的Patter对象和要匹配的字符串创建匹配器对象(Matcher类的实例对象)
		Matcher m=p.matcher(str);
		//3.通过匹配器对象的find方法判断是否有匹配对象;如果有,使用group方法获取匹配的子串
		while(m.find()) {
		System.out.println(m.group());}
	}

 

 


四.正则表达式的总结

1.正则表达式的组成:

一般字符:表示匹配自身;如:”a”,表示匹配的字符传的值只能是”a”;所有普通字符串,都可以看作是一个正则表达式,匹配的是它自身;
字符类:使用中括号[]和里面的内容组成,表示一个字符的取值范围;如:[a-z]:表示被匹配的字符的值可以是所有的小写字母;
预定义字符类:使用特殊符号或转义字符组成的表示特殊匹配范围的规则,如:”.”    表示匹配所有字符;\d表示匹配0-9的所有数字;
边界匹配器:表示匹配一些字符串的边界,如:^:表示匹配一行的开始;$:表示匹配一行的结束;
数量词:前面必须跟一个规则,表示这个规则可以重复的次数;如:\d+:表示最少有一个数字;.?:表示最多有一个任意字符;
组:使用小括号将一个或多个规则括起来,就形成了组;在同一个正则表达式中,后面引用前面定义的组中的规则,格式是:    \\组号
在同一个语句中,后面的正则表达式也可以引用前面正则表达式中定义的规则,使用的格式是:    $组号    
正则中的组,组号是按照组的书写顺序,从前往后,从1开始,逐渐递增的;如:
(a)(b):定义了两个组;1组:(a);2组:(b);
(a(b(cde)(f))):定义了四个组;1组:(a(b(cde)(f)));2组:(b(cde)(f);3组:(cde);4组:(f);
调用组的地方匹配的内容和被调用组中匹配的内容一致;

2.正则表达式的常见应用,有字符串的匹配、切割、替换和获取;

匹配、切割和替换的应用,直接通过String类提供的方法就可以完成;
获取功能,需要经过三步:
1、先根据写好的正则表达式创建一个Pattern类的对象;
2、根据创建的Patter类对象和要匹配的字符串出创建一个匹配器对象;
3、通过匹配器对象来匹配和获取需要的子字符串;判断是否有匹配的子串;
 

你可能感兴趣的:(java)