正则表达式

基础篇

句点符号

匹配所有字符,包括空格、Tab字符甚至换行符。
Alt text

方括号符号

只有方括号里面指定的字符才参与匹配。
Alt text

“或”符号

|操作符的基本意义就是“或”运算。
Alt text

表示匹配次数的符号

Alt text
Alt text

“否”符号

“^”符号称为“否”符号。如果用在方括号内,“^”表示不想要匹配的字符。
Alt text

圆括号和空白符号

Alt text

其它符号

Alt text

应用篇

邮政编码

[代码块]
1
2
3
4
5
6
7
8
9
10
// [0-9]{6}
public static boolean checkPostcode(String inputStr) {
Pattern p = Pattern.compile("[0-9]{6}");
Matcher m = p.matcher(inputStr);
if (!m.matches()) {
System.out.println("****邮政编码格式不符!*****");
return false;
}
return true;
}

EMAIL

[代码块]
1
2
3
4
5
6
7
8
9
10
// [0-9A-Za-z]+@([0-9a-zA-Z]+.){1,2}(com|net|cn|com.cn)
public static boolean checkEmail(String inputStr) {
Pattern p = Pattern.compile("[0-9A-Za-z]+@([0-9a-zA-Z]+.){1,2}(com|net|cn|com.cn)");
Matcher m = p.matcher(inputStr);
if (!m.matches()) {
System.out.println("****电子邮件格式不符!*****");
return false;
}
return true;
}

IP地址

[代码块]
1
2
3
4
5
6
7
8
9
10
11
public static boolean ipValid(String s) {
String regex0 = "(2[0-4]\\d)" + "|(25[0-5])";
String regex1 = "1\\d{2}";
String regex2 = "[1-9]\\d";
String regex3 = "\\d";
String regex = "(" + regex0 + ")|(" + regex1 + ")|(" + regex2 + ")|(" + regex3 + ")";
regex = "(" + regex + ").(" + regex + ").(" + regex + ").(" + regex + ")";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(s);
return m.matches();
}

正则表达式几种常用功能

[查询]
1
2
3
4
5
6
System.out.println(findStr("a|f", "abcd"));
public static boolean findStr(String regEx, String str) {
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
return m.find();
}
[提取]
1
2
3
4
5
6
7
8
9
10
11
12
private static void extractStr() {
String regEx = ".+\\\\(.+)$";
String str = "c:\\dir1\\dir2\\name.txt";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
boolean rs = m.find();
if (rs) {
for (int i = 1; i <= m.groupCount(); i++) {
System.out.println(m.group(i));
}
}
}
[替换]
1
2
3
4
5
String regEx = "a+"; //表示一个或多个a
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher("aaabbced a ccdeaa");
System.out.println("替换:" + m.replaceAll("A"));
System.out.println("删除:" + m.replaceAll(""));
[分割]
1
2
3
4
5
6
private static void splitStr() {
String regEx = "::";
Pattern p = Pattern.compile(regEx);
String[] r = p.split("xd::abc::cde");
System.out.println(Arrays.toString(r));
}

其它

\d 等於 [0-9] 数字
\D 等於 [^0-9] 非数字
\s 等於 [ \t\n\x0B\f\r] 空白字元
\S 等於 [^ \t\n\x0B\f\r] 非空白字元
\w 等於 [a-zA-Z_0-9] 数字或是英文字
\W 等於 [^a-zA-Z_0-9] 非数字与英文字
^ 表示每行的开头
$ 表示每行的结尾

匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内):[^\x00-\xff]
应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
匹配空行的正则表达式:\n[\s| ]\r
匹配HTML标记的正则表达式:/<(.
)>.*</\1>|<(.) />/
匹配首尾空格的正则表达式:(^\s
)|(\s*$)