正则表达式的作用:
是一些特殊字符组成的校验规则,可以校验信息的正确性,校验邮箱是否合法,或电话号码、金额等。
例如校验qq
/**
* 校验qq号
*/
public class RegexDemo1 {
public static void main(String[] args) {
System.out.println(checkQQ("1084444848"));
}
public static boolean checkQQ(String QQ){
return QQ!=null && QQ.matches("\\d{4,10}");//大于等于4位,小于10位,全为数字
}
}
规则一般在API的pattern里查看
字符类
[abc] :范围匹配;a、b或c (简单类) 可匹配 abc、a、b、c、ab
[^abc] :任何字符。除了a. b或c (否定)
[a-ZA-Z] :a到z或A到Z.两头的字母包括在内(范围)
[a-d[m-p]] :a到d或m到p:[a-dm-p] (并集)
[a-z&&[def23]] :d、e或f (交集)
^xxx$ 开始和结尾
. 任何字符
\d 数字: [0-9]
\D 非数字: [^0-9]
\s 空白字符: [ \t\n\x0B\f\r] 如 "A\sB" "A B"
\S 非空白字符: [^\s]
\w 单词字符: [a-ZA-Z_0-9] 匹配一个字母、数字或下划线
\W 非单词字符。[^\W]
Greedy数量词
x? 一次或一次也没有 零个或一个
x* 零次或多次
X+ 一次或多次 至少一个字符
x{n} 恰好n次 n个字符
x{n,} 至少n次
x{n,m} 至少n次,但是不超过m次
Ac|Bd 匹配Ac或Bd
正则查询邮箱
public static void main(String[] args) {
/**
* 正则查询邮箱
*/
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的邮箱");
String email = sc.nextLine();
//wahdha@163qq.com
//2awda@213.com.cn
//\w 单词字符:[a-zA-Z_0-9]
if(email.matches("\\w{1,}@\\w{2,10}(\\.\\w{2,10}){1,2}")){
System.out.println("邮箱正确");
}else{
System.err.println("邮箱格式不正确");
}
}
正则非贪婪匹配
- 正则表达式匹配默认使用贪婪匹配
- 使用?表示对某一规则进行非贪婪匹配
- 注意区分?的含义
\d??