Java中用到的正则表达式规则在java.util.regex.Pattern类中可以查到。
常用规则有:
1.字符
x 表示字符x。
\\ 表示\ , 第一个\是转义,.*[]^${}\+?|() 都需要转义。
\n 换行符('\u000A')。
\r 回车符('\u000D')。
2.字符类
[abc] 表示字符a或b或c。
[^abc] 表示除字符a,b,c以外的一个字符。
[a-zA-Z] 表示a到z或A到Z的所有字母中的其中。
[0-9] 表示0到9的数字
3.预定义字符类
. 表示任意字符,要表示.本身用\.
\d 表示0-9的数字,与[0-9]相同。
\w 表示单词字符,与[a-zA-Z_0-9]相同 ,字母数字下划线。
4.边界匹配器
^x 表示以x开头。
x$ 表示以x 结尾。如 ^abc$是指abc
\b 表示单词边界,单词字符之间那些非单词字符就是单词边界
5.数量词
x? 表示x出现0次或1次
x* 表示x出现0次到多次
x+ 表示x出现1次到多次
x{n} 表示x出现n次
x{n,} 表示x出现n次或更多次
x{n,m}表示x出现n次到m次
使用举例:
1. 判断功能
检查QQ号码:
package regex; import java.util.Scanner; /** * * 输入QQ号码,检查是否符合以下规则: * 1. 5-15位数字 * 2. 不以0开头 */ public class RegexDemo { /** * @param args */ public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入QQ号码:"); String qq = sc.nextLine(); System.out.println("检查结果:" + checkQQ(qq)); } public static boolean checkQQ(String qq) { // 或者 "[1-9]\\d{4,14}" return qq.matches("[1-9][0-9]{4,14}"); } }
2. 分割功能
String类的 String[] split(String regex)
public class SplitDemo { /** * @param args */ public static void main(String[] args) { String s = "18-24"; String regex = "-"; String[] strings = s.split(regex); int startAge = Integer.parseInt(strings[0]); int endAge = Integer.parseInt(strings[1]); System.out.println("Start age:" + startAge + " End age:" + endAge); String a1 = "a,b,c"; String[] arrayString1 = a1.split(","); for (int i = 0; i < arrayString1.length; i++) { System.out.println(arrayString1[i]); } System.out.println("----------------------"); String a2 = "a.b.c"; String[] arrayString2 = a2.split("\\."); for (int i = 0; i < arrayString2.length; i++) { System.out.println(arrayString2[i]); } System.out.println("----------------------"); String a3 = "a b c"; String[] arrayString3 = a3.split(" +"); for (int i = 0; i < arrayString3.length; i++) { System.out.println(arrayString3[i]); } System.out.println("----------------------"); String a4 = "C:\\Users\\zhenijia\\Documents\\ECE\\automated_test"; String[] arrayString4 = a4.split("\\\\"); for (int i = 0; i < arrayString4.length; i++) { System.out.println(arrayString4[i]); } System.out.println("----------------------"); } }
3.替换功能
String类的 String replaceAll(String regex, String replacement) 和 String replaceFirst(String regex, String replacement)
public static void main(String[] args) { String regex = "a*b"; String replace = "love"; String string = "abaabaaabb"; String replaceAll = string.replaceAll(regex, replace); String replaceFirst = string.replaceFirst(regex, replace); System.out.println("replaceAll:" + replaceAll); System.out.println("replaceFirst:" + replaceFirst); }
4.查找功能,使用Pattern和Matcher类
public static void main(String[] args) { // 查找该字符串中的3字母的单词 String s = "jin tian yao xia yu, qing da jia dai hao yu san."; Pattern p = Pattern.compile("\\b\\w{3}\\b"); Matcher m = p.matcher(s); // 注意,必须先find,才能group while (m.find()) { System.out.println(m.group()); } }
Pattern和Matcher类也可以做判断,基本格式是这样用:
Pattern p = Pattern.compile("\\b\\w{3}\\b"); Matcher m = p.matcher("jin"); return m.matches();
如果字符串整个匹配正则表达式的,就会返回true。