正则表达式是一种强大而灵活的文本处理工具,使用正则表达式,我们能够以编程的方式,构造复杂的文本模式,并对输入的字符串进行搜索。一旦找到了匹配这些模式的部分,你就能够随心所欲的对它们进行处理(来自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)字符类
(2)逻辑操作符
(3)边界匹配符
(4)量词匹配
三、更为强大的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用了对目标字符串按照匹配模式进行分割。