正则表达式的组成规则:
字符:
x 代表一个字符,可以是字母、数字等
\\ 反斜线字符。
\n 新行(换行)符 ('\u000A')
\r 回车符 ('\u000D')
//如下正则表达式,匹配一段字符串中是否有新行、回车符、TESTNAME字符、\d,\\d表示\d
string regEx = "\n\\d*\r*!\\s*TESTNAME“
字符类:
[abc] a、b 或 c,例如"[abc]"可以匹配"plain"中的'a'
[^abc] 任何字符,除了 a、b 或 c,例如"[ ^abc]"可以匹配"plain"中
的'p'、'l'、'i'、'n'。
[a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内,例如"[a-z]"可以匹配'a'到'z'范围内的任意小
写字母
[0-9] 0到9的字符都包括,例如"[0-9]"可以匹配'0'到'9'范围内的任意数字
预定义字符类:
"^.$"可以匹配所有字符
\d 数字:[0-9],例如"\\d"可以匹配0-9的所有数字,第一个\是转义符
\w 单词字符:[a-zA-Z_0-9],例如"\w"可以匹配a到z,A到Z,_,0到9这些字符
在正则表达式里面组成单词的东西必须有这些东西组成
边界匹配器:
^ 行的开头 ,例如"^1[abc]$"可以匹配"1a"中的1,不能匹配"a1"中的1
$ 行的结尾 ,例如"^1[abc]$"中$表示正则表达式的结尾
\b 单词边界(需使用模式和匹配器),就是不是单词字符的地方,例如"er\b"可以匹配"never"中的"er",
但不能匹配"verb"中的"er"
数量词:
X? X,一次或一次也没有,例如"do(es)?" 可以匹配 "do" 或 "does" 中的"do"
X* X,零次或多次,例如"zo*" 能匹配"z"以及"zoo"
X+ X,一次或多次,例如"zo+"能匹配"zo"以及"zoo"但不能匹配"z"
X{n} X,恰好n次,例如"o{2}"不能匹配"Bob"中的"o"但是能匹配"food"中的两个o
X{n,} X,至少n次,例如"o{2,}"不能匹配"Bob"中的"o"但能匹配"foooood"中的所有 o
X{n,m} X,至少n次但是不超过m次,例如"o{2,3}"能匹配"foood"中的三个o,但不能匹配"fod"中的一
个o
正则表达式常用方法:
//matches是匹配功能
public boolean matches(String regex)
//案例
public static void main(String[] args) {
//1.正则表达式,匹配:public boolean matches(String regex)
System.out.println("abc".matches("[a-z]{4}"));
}
分割功能:
//split是分割功能
public String[] split(String regex)
//案例
public static void main(String[] args) {
String str = "abc,123,Aaa,DDD";//获得字符串
String[] arr = str.split(",");//分割字符串
for(int i = 0;i<=arr.length - 1;i++){//循环遍历得到每一个字符串
System.out.println(arr[i]);
}
}
替换功能:
//replaceAll是替换功能
public String replaceAll(String regex,String replacement)
//案例
public static void main(String[] args) {
//把dasdDADdaas中所有的大写字母A-Z改为M
System.out.println("dasdDADdaas".replaceAll("[A-Z]", "M"));
}
获取功能:
public static void main(String[] args) {
Pattern p=Pattern.compile("\\d+");
String rs = p.pattern();//获取 \d+
System.out.println("pattern方法获取的结果:"+rs);
//用获取的结果p分割字符串
String[] str=p.split("我的QQ是:456456我的电话是:0532214我的邮箱是:[email protected]");
//循环遍历得到分割后的字符串
for(String s:str){
System.out.println(s);
}
}
正则表达式的应用:
验证手机号:
//案例
public static void main(String[] args) {
//说明:前三位分别以13,14,15,18开头,第3位使用部分数组,总长度是11位
String regex = "^(13[0-
9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\\d{8}$";
Scanner sc = new Scanner(System.in);//从控制台输入字符串信息
String str = sc.nextLine();//获得输入的信息
System.out.println(str.matches(regex));// str字符串是否匹配regex规则
}
验证邮箱:
//案例
public static void main(String[] args) {
//说明:相关字符开头,接着是@,接着是相关字符,接着是.
String regex = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$";
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();//获得输入的信息
System.out.println(str.matches(regex));// str字符串是否匹配regex规则
}
验证QQ号:
//案例
public static void main(String[] args) {
//QQ号匹配规则:首字母不为0,第二位可以是0,只能为数字,至少为5位,QQ号从10000开始,据说
是马X腾的
String regex = "[1-9][0-9]{4,}";
//String regex = "[1-9]\\d{4,}"; //另一种写法
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();//获得输入的信息
System.out.println(str.matches(regex));// str字符串是否匹配regex规则
}