正则表达式(总结篇)

一、概念

正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。在众多语言中都可以支持正则表达式,如Perl、PHP、Java、Python、Ruby等。当然在Java中也可以通过处理字符串的方式达到检索,替换文本字符串的目的,但是有了正则表达式写代码更加简洁,通常两三行代码就可以达到目的,当然这也是建立在熟悉正则表达式的基础之上的。

二、基础语法

1、正则表达式是什么?
正则表达式,就是用某种模式去匹配一类字符串的公式。学习正则表达式就是学习怎样定义一种“模式”的语法,说白了,就是学习各种匹配的规则,例如匹配数字要怎么写,匹配字符要怎么写等等。
2、导入的包
在java中调用正则表达式的类是java.util.regex.Matcher和java.util.regex.Pattern,java.util.regex包是从jdk1.4开始提供的。有多种写法来使用正则表达式。
仅仅是匹配
方法1:

import java.awt.peer.PanelPeer;
import java.lang.reflect.Array;
import java.util.regex.Pattern;

public class Demo7 {

	public static void main(String[] args) {
		//要匹配的字符
		String string="8";
		//正则表达式(匹配模式)
		String regex="[0-9]";//匹配原理解析:表示匹配0~9的任意一个数,后面会具体讲解
		//返回匹配的结果,匹配成功就返回true,失败就返回false,此次匹配返回true。
		boolean flag=Pattern.matches(regex, string);
		System.out.println(flag);//true
	}

}

关键代码:boolean flag=Pattern.matches(regex, string);

方法2:

import java.awt.peer.PanelPeer;
import java.lang.reflect.Array;
import java.util.regex.Pattern;

public class Demo7 {

	public static void main(String[] args) {
		//要匹配的字符
		String string="A";
		//正则表达式(匹配模式)
		String regex="[0-9]";//匹配原理解析:表示匹配0~9的任意一个数,后面会具体讲解
		//返回匹配的结果,匹配成功就返回true,失败就返回false,此次匹配返回true。
		System.out.println(string.matches(regex));//false
	}
}

关键代码:string.matches(regex)

一般常用方法2,看个人喜好选择其中一种即可。

三、正则语法

1、常用元字符
正则表达式常用的元字符如下:
正则表达式(总结篇)
2、连接符
在正则表达式中,匹配数字或者英文字母的书写非常不方便。因此,正则表达式引入了连接符“-”来定义字符的范围。
正则表达式(总结篇)
3、限定符
限定符,就是限定某个或某类字符出现的次数。
常用的正则表达式限定符如下:
正则表达式(总结篇)
4、定位符
在正则表达式中,定位符,说白了,就是限定某些字符出现的位置。
常用的正则表达式定位符如下:
正则表达式(总结篇)
5、转义字符
1)JavaScript中的转义字符
正则表达式本身有它的一套转义字符。正则表达式中的转义字符跟JavaScript中的转义字符是不一样的,仅仅是概念理解一样,大家要区分一下。
正则表达式(总结篇)
2)正则表达式中的转义字符
我们都知道正则表达式包括2种字符:(1)普通字符;(2)特殊字符。如果我们要匹配正则表达式中的特殊字符,我们就必须在该特殊字符前面加上反斜杠“\”将其进行转义。
举例:
go+
分析:
因为+是正则表达式的特殊符号,因此必须在+前面加上“\”对其进行转义。

例如要匹配字面意义的“\”,就需要使用“\”表示。

需要转义的字符有:$(、)、+.[]?、***/^{}|

6、分组
分组又称为子表达式,即把一个正则表达式的全部或部分分成一个或多个组。其中,分组使用的字符为“(”和“)”,即左圆括号和右圆括号。分组之后,用小括号括起来的表达式看出一个整体来处理。

7、选择符
选择匹配符,很简单。在正则表达式中,选择匹配符是“|”,用于选择匹配2个选项之中的任意一个,类似JavaScript中的“或”运算。

例如,“abc|def1”匹配的是“abc”或“def1”,而不是“abc1”或“def1”。如果要匹配“abc1”或“def1”,应该使用分组符,即“(abcd|efgh)1”。

8、优先级顺序
正则表达式(总结篇)
上面优先级是从高到低排列。

四、方法

(1)匹配matches()
在前面已经使用了匹配的方法,在此就不再例举了。


关键代码:boolean flag=Pattern.matches(regex, string);
关键代码:string.matches(regex)

(2)替换replaceAll()

public class Demo7 {
	public static void main(String[] args) {
		//要匹配的字符串
		String string="45cf45dG892Df";//有数字、字母大小写组成
		//正则表达式(匹配模式)
		String regex="[a-zA-Z]+";
		//正则表达式(匹配模式)
		String regex2="\\d+";
		//将字符串中英文字母替换为&符号,输出结果为:45&45&892&
		System.out.println(string.replaceAll(regex, "&"));
		//将字符串中单个数字或者连续的数字替换为0,输出结果为:0cf0dG0Df
		System.out.println(string.replaceAll(regex2, "0"));
	}
}

(3)切割,根据大写字母切割字符串。split()

public class Demo7 {

	public static void main(String[] args) {
		//要匹配的字符串
		String string="45cf45dG892Df";//有数字、字母大小写组成
		//正则表达式(匹配模式)
		String regex="[A-Z]";
		//根据大写字母切割字符串
		String[] arr=string.split(regex);
		for(String s:arr) {
			System.out.println(s);
		}
		//输出结果为:
		//45cf45d
		//892
		//f
	}
}

五、总结

  1. 任意一个字符表示匹配任意对应的字符,如a匹配a,7匹配7,-匹配-。

  2. []代表匹配中括号中其中任一个字符,如[abc]匹配a或b或c。

  3. -在中括号里面和外面代表含义不同,如在外时,就匹配-,如果在中括号内[a-b]表示匹配26个小写字母中的任一个;[a-zA-Z]匹配大小写共52个字母中任一个;[0-9]匹配十个数字中任一个。

  4. 在中括号里面和外面含义不同,如在外时,就表示开头,如7[0-9]表示匹配开头是7的,且第二位是任一数字的字符串;如果在中括号里面,表示除了这个字符之外的任意字符(包括数字,特殊字符),如[^abc]表示匹配出去abc之外的其他任一字符。

  5. .表示匹配任意的字符。

  6. \d表示数字。

  7. \D表示非数字。

  8. \s表示由空字符组成,[ \t\n\r\x\f]。

  9. \S表示由非空字符组成,[^\s]。

  10. \w表示字母、数字、下划线,[a-zA-Z0-9_]。

  11. \W表示不是由字母、数字、下划线组成。

  12. ?: 表示出现0次或1次。

  13. +表示出现1次或多次。

  14. *表示出现0次、1次或多次。

  15. {n}表示出现n次。

  16. {n,m}表示出现n~m次。

  17. {n,}表示出现n次或n次以上。

  18. XY表示X后面跟着Y,这里X和Y分别是正则表达式的一部分。

  19. X|Y表示X或Y,比如"food|f"匹配的是foo(d或f),而"(food)|f"匹配的是food或f。

  20. (X)子表达式,将X看做是一个整体。

六、结束语

正则表达式其实也不过如此,她并没有想象的那么难,反而系统的学习了之后,反而觉得其实她很简单。
忘记了记得回来看看她哟~
掰了掰啦~~

上一篇:通过正则表达式取Json字符串的value值,不管中文,英文,大小写字符,还是数字,小数点通吃


下一篇:RegEx (20) -使用字符 \Z (大写)