正则表达式是一种强大而灵活的文本处理工具,使用正则表达式,我们能够以编程的方式,构造复杂的文本模式,并对输入的字符串进行搜索。一旦找到了匹配这些模式的部分,你就能够随心所欲的对它们进行处理(来自Java编程思想第四版的描述)。各种语言对正则表达式的支持都有着异曲同工之妙,但提供的API却不尽相同。

一、String类中的利用正则表达式的三个方法

(1)matches方法

public boolean matches(String regex)

该方法只有一个参数,即正则字符串,返回boolean类型,true or false,表示调用该方法的字符串是否符合该正则匹配模式

String str = "Hello, I'm a student from ZheJiang University";
System.out.println(str.matches(".+"));

这段代码输出的是true,因为正则字符串中 . 代表的是任意字符,+表示数量:1个或者多个
(2)split方法

public String[] split(String regex)

同上,只有一个正则字符串参数,返回一个字符串数组,表示将该字符串按照正则匹配模式进行分割,分割成一个字符串数组,在String类中还重载了一个split方法

public String[] split(String regex, int limit)

limit参数表示把这个String分割成几份
示例:

String str = "Hello, I'm a student from ZheJiang University";
System.out.println(Arrays.toString(str.split(" ")));

这里表示把这个字符串以空格分割成一个字符串数组后输出
(3)replace(replaceAll)方法

public String replace(CharSequence target, CharSequence replacement)

两个参数,第一个参数表示匹配的字符串模式,第二个参数表示替换的内容
例子:

String str = "Hello, I'm a student from ZheJiang University";
System.out.println(str.replace("Hello","Good"));

输出

Good, I'm a student from ZheJiang University

String对象的这三个方法能较好的解决一些基础的正则匹配,正则替换的问题,但遇到较为复杂的正则问题还是需要借助java.util.regex包下的Pattern类和Matcher类来进行解决。

二、部分常用表达式

(1)字符类

java怎么写正则表达式 java实现正则表达式_正则表达式


(2)逻辑操作符

java怎么写正则表达式 java实现正则表达式_正则表达式_02


(3)边界匹配符

java怎么写正则表达式 java实现正则表达式_字符串_03


(4)量词匹配

java怎么写正则表达式 java实现正则表达式_字符串_04

三、更为强大的Pattern类和Matcher类

这两个类的用法的大致过程是:先用Pattern类中的static方法compile编译一个正则表达式,返回一个Pattern对象,接下来,把你所要检索的字符串传入Pattern对象的matcher方法中,该方法会生成一个Matcher对象,然后就可以调用这个对象的很多方法来解决自己的问题了,例如:

String regex = "\\d{3}[a-zA-Z]{4}";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher("123Ah1d");
System.out.println(m.matches());

这里Matcher对象的matches方法表示所需要检查的字符串和正则表达式是否匹配,当然Matcher类中还有很多其他的方法,诸如:

public boolean find()
public boolean lookingAt()
public String replaceAll(String replacement)

这些方法的作用大家可以看一下jdk文档进行详细了解
还有一个reset方法:

public Matcher reset(CharSequence input)

该方法重新传入一个字符串,表示更改所需要检查的字符串
例如

m.reset("23rfghd");

表示把上面代码中的检查字符串"123Ah1d"改为"23rfghd"

当然,单独靠Pattern一个类也能解决一些基础的正则匹配问题
例如,Pattern类方法中的静态方法

public static boolean matches(String regex, CharSequence input)
public String[] split(CharSequence input, int limit)

matches方法用来检测字符串与正则表达式是否匹配
split用了对目标字符串按照匹配模式进行分割。