正则规则整理
字符集
[1234] 表示1,2,3,4之一
[^12] 表示除了1,2
[1-5] 表示1,2,3,4,5
[a-f] 表示a-f之间的
[0-9a-fA-F] 表示一个16进制字符
0[xX][0-9a-fA-F]{1,8} 表示整数的16进制数表达式
[\w-]{8,15} 表示8-15个人以字符、下划线、数字及"-"
预定义字符集
\d 表示[0-9]
"."点 表示任意字符
\w 表示单词字符[0-9a-zA-Z] 注:包含下划线"_"
\s 表示匹配空白:\t\n\r\b\p
\D (不常用) 表示非数字
\S (不常用)表示非空白
\W (不常用)表示非单词字符[0-9a-zA-Z]
{m,n} 表示词数m到n个
{n} 表示词数n个,比如表示"5个以上"用{5,}
? 表示能出现0到1词{0,1}
- 表示能出现1到n次
- 表示能出现0到n次
正则表达式以"^"开头, "$" 结尾
常用正则表达式写法
邮政编码 [1][0-9][0-9][0-9][0-9][0-9]$
[2]{6}$
^\d{6}$
用户名规则 ^\w{8,10}$(可出现8-10个单词或字符)
电话号码 +86 13912345678
^(+86|0086)?\s?\d{11}$
("+"特殊字符,表示转义"+"表示"加号"
+86 表示出现"+86"这几个字符
(+86|0086)? 表示"+86"或"0086"出现0-1次
\s? 表示空白(空格)出现0-1次
\d{11}表示出现11位数字)
身份证号码 ^\d{15}(\d{2}[0-9xX])?$
一个点的坐标 ^\d+(,\s|\s+)\d+$
(\d+ 表示出现1个及以上的数字
(,\s|\s+)表示出现"逗号和0个及以上的空白"或"1个以上的空白"
\d+ 表示出现1个及以上的数字)
日期 2011-01-30
^\d{4}-\d{2}-\d{2}$
^\d{4}(-\d{2}){2}$
IP地址 192.168.0.2
^\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}$
^\d{1,3}(.\d{1,3}){3}$
^(\d{1,3}.){3}\d{1,3}$
例
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexTestHarnessV5 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while(true){
System.out.println("Enter your regex: ");
Pattern pattern = Pattern.compile(scanner.nextLine());
System.out.printf("Enter input string to search: ");
Matcher matcher = pattern.matcher(scanner.nextLine());
boolean found = false;
while(matcher.find()){
System.out.printf("Found "%s" starting index %d ending index %d.%n, args)",
matcher.group(),matcher.start(),matcher.end());
found = true;
}
if(!found){
System.out.printf("No match found.%n");
}
}
}
}
9064AD9BCF3450F6B2BA9C9BB798BE8B.m4a