浅谈java正则表达式(新手必看,易理解,通俗易懂)

时间:2021-08-05 14:46:37

今天看了点书,小结一下,首先正则表达式(RegularExpressions)的用途主要有以下几个:

1.字符串匹配(字符匹配)

2.字符串查找

3.字符串替换

举几个小例子吧。

有时我们要检查我们自己填写的IP地址格式是否正确,这里我们就要用到正则表达式来设置这个格式。

有一个网页包含大量的数据,假如我们要将里面的所有email地址或者所有的手机号呀,链接呀等等。这些都要和设置的格式进行匹配。用正则表达式就可以解决设置问题了。

正则表达式涉及到的类有三个:java.lang.String、java.util.regex.Pattern、java.util.regex.matcher。

先看下String类吧。

public class Test {

public static void main(String[] args) {
//先简单认识正则表达式的概念
System.out.println("abcd".matches("\\D\\D\\D\\D"));
}
}

上述代码打印结果为true;是不是很不可思议?其实\D表示的是非数字[^0-9]。相当4个字符'a' 'b' 'c' 'd'分别与四个\D逐个进行比较。所以就为true了。这就是字符匹配,这下理解了吧。

public class Test {

public static void main(String[] args) {
//把下面含有数字部分的字符串替换成别的东西
System.out.println("4as76dd7d78".replaceAll("\\d", "A"));

}
}

打印结果为AasAAddAdAA;\d代表的是数字[0-9],这样替换是不是更方便了?不用一个字符一个字符地去替换。

现在看下pattern类,通过查看pattern类中的构造匹配表如下表:

浅谈java正则表达式(新手必看,易理解,通俗易懂)

这就是匹配表,这里我只是给了一小部分,具体建议还是自己去查一下API文档吧。

matcher和pattern混合使用效果如下:

public class Test {

public static void main(String[] args) {
//简单认识正则表达式
//创建一个模式
Pattern pattern = Pattern.compile("[a-z]{3}");
Matcher m = pattern.matcher("asd");
System.out.println(m.matches());
System.out.println("asd".matches("[a-z]{3}"));//两个比较结果一样的,但是第一种方式较优
}
}

OK,现在有所了解了,我先弄点小练习给大伙们练练手,看看自己判断的结果和打印的结果一样不。

"a".matches(".");
"aa".matches("aa");
"aaaa".matches("a*");
"aaa".matches("a+");
"aaa".matches("a?");
"a".matches("[abc]");
"a".matches("[^abc]");
"123-4567-80988-1234-00".matches("\\d{0,5}");
"A".matches("[a-zA-Z]");
"A".matches("[a-z]|[A-Z]");
"A".matches("[a-z[A-Z]]");
"R".matches("[A-Z&&[RFG]]");
"".matches("a?");
"a".matches("a?");
"hello jiaxun".matches("^h.*");
"hello jiaxun".matches("^h[a-z]{1,4}o\\b.*");
"5425414321".matches("\\d{3,20}");
"192.168.13.xxx".matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}");
"123".matches("[0-2][0-5][1-4]");

结果自己去验证吧,有对有错的,嘿嘿~~
现在已经对正则算初识了,再熟悉下里面的方法就OK了。。。。