正则表达式 | Java | 上课内容整理

        别管了,博主是懒猪,上上周的上课内容,我没去上课,而且11月3号才刚刚开始看ppt,11月4号晚上十一点多才开始写,事情又多人又懒,要废力(悲)


这是一篇关于Java中使用正则表达式的一篇笔记整理,原内容来自刘滨老师的上课屁屁踢。

1、在Java中使用正则表达式

通常,String类中有很多方法都是支持正则表达式的。

1、matches()方法:可以验证字符串是否符合给定的正则表达式,返回值是一个boolean值。例如

String regular = "[0-9]*"; //表示字符串仅由数字组成
String str = "114514";
if ( str.matches(regular) ) {
    System.out.println("YES");
}

运行上面的代码,得到的结果是YES.


2、replaceAll()方法:可以将符合正则表达式的子字符串置换为指定的字符串。例如

String regular = "[0-9]"; //表示一个数字
String str = "There are 50 students in 1 classroom.";
str = str.replaceAll(regular, "REPLACED");
System.out.println(str);

运行上面的代码,得到的结果是
There are REPLACEDREPLACED students in REPLACED classroom.

类似有replace,replaceFirst等方法。

3、split()方法:依指定的正则表达式,将符合的子字符串排除,剩下的子字符串分离出来并以字符串数组返回。例如

String regular = "[1234567890]";
String str = "There50in2classrooms.";
for (String sub: str.split(regular)) {
    System.out.println(sub);
}

运行上面的代码,得到的结果是
There

in
classrooms.

2、正则表达式

我们要知道的是普通字符、元字符和贪婪量词。

①普通字符就是常用的字符,例如一个字母、一个数字、一个汉字等;

②但是,在实际应用中,往往需要匹配任意一个数字或字母,任意连续多个字符等情况,此时再使用普通字符显然不方便,此时采用元字符。例如,\d可以替代任何一个数字,\是转义字符。如果不加\,而是只有个d,就表示普通字符小写字母d。

常用的元字符和贪婪量词有

\ . * + - { } [ ] ^ $ | ? ( ) : ! =

1、\
转义字符。
例如\d表示数字,\D表示非数字字符。

2、.
匹配除换行符(\n,\r)以外的其他任何单个字符。
例如d.t可以匹配dat,dot,dnt,d~t等。

3、*
匹配前面的子表达式零次或多次。
例如do*可以匹配d,do,doo,dooo,...

4、+
匹配前面的子表达式一次或多次。
例如do*可以匹配do,doo,dooo,...。不能匹配d。

5、-
表示字符范围。例子参考第7条。
特别提示:[50-99]等价于[0-9],这里的50和99实际上都会被认为是ASCLL码。

6、{n:m}
n和m是非负整数,且n≤m。匹配前面的子表达式确定的n次到m次。
例如T{3}匹配TTT,不能匹配TT,不能匹配TTTT。
例如T{3:5}匹配TTT或TTTT或TTTTT。
例如T{3:}匹配TTT,TTTT,TTTTT,TTTTTT,...

7、[xyz]
字符集合。匹配所包含的任何一个字符。
例如[aeiou]匹配"play"中的'a'。
例如[0-9]匹配"pl4y"中的'4'。

8、^
一种方式理解为非。
例如[^0-9],匹配非数字。

另一种方式表示字符串的开始位置。
例如^[0-9]+[a-z]*表示以至少一个数字开头,后接任意个小写字母的字符串。

9、$
表示字符串结束位置。
例如^[0-9]+[a-z]$表示以至少一个数字开头,并以一个小写字母结尾的字符串。

10、|
逻辑或
例如[a-z]|[A-z]匹配字母。

11、?
匹配前面的子表达式零次或一次。
例如do(es)?可以匹配do或者does

12、()
通常意义上的括号。把若干个字符当成一个整体。例子参考第11条。

13、: ! = 看图

 (图源菜鸟。)

一些其他特殊的情况,见图


正则表达式非常漂亮,我从见到它的第一眼就认为它轻巧、方便,但要熟练用好它并不容易。

猜你喜欢

转载自blog.csdn.net/m0_70241024/article/details/127698330
今日推荐