正则表达式:规则表达式,使用一些特定的符号来制定一个规则,使用此规则,来规范制定的字符串。
字符类 | |
[ abc ] | a、b 或 c (简单类) |
[ ^ abc ] | 任何字符,除了a、b 或 c(否定) |
[ a-zA- Z ] | a 到 z 或 A 到 z,两头的字母包括在内(范围) |
[ a-d [ m-p ] ] | a 到 d 或 m 到 p: [a - dm - p ] (并集) |
[a - z && [ def ] ] | d、e 或 f(交集) |
[a- z && [ ^bc ] ] | a 到 z,除了 b 和 c : [ ad - z ](减去) |
[ a - z && [ ^m - p ] ] | a 到 z,而非 m 到 p : [ a - lq - z ] (减去) |
预定义字符类 | |
. | 任何字符(与行结束符可能匹配也可能不匹配) |
\d | 数字: [ 0 - 9 ] |
\D | 非数字: [ ^ 0 - 9 ] |
\s | 空白字符: [ \t \n \x0B \f \r ] |
\S | 非空白字符: [ ^ \s ] |
\w | 单词字符: [ a - zA - Z _ 0 - 9 ] |
\W | 非单词字符: [ ^ \w ] |
边界匹配器 | |
^ | 行的开头 |
$ | 行的结尾 |
\b | 单词边界 |
\B | 非单词边界 |
\A | 输入的开头 |
\G | 上一个匹配的结尾 |
\Z | 输入的结尾,仅用于最后的结束符(如果有的话) |
\z | 输入的结尾 |
Greedy数量词 | |
X? | X,一次或一次也没有 |
X * | X, 零次或多次 |
X + | X,一次或多次 |
X { n } | X, 恰好 n 次 |
X { n , } | X, 至少n次 |
X { n , m } | X, 至少 n 次,但是不超过 m 次 |
第一种:
定义一个规则
Pattern p = Pattern.compile("a*b");
//输入内容
Matcher m = p.matcher("aaaaaab");
//匹配
boolean b1 = m.matches();
System.out.println(b1);
第二种:
String s = "abc";
boolean b2 = s.matches("a*b");
System.out.println(b2);
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ZhengZe {
public static void main(String[] args) {
//第一种:
//定义一个规则
Pattern p = Pattern.compile("a*b");
//输入内容
Matcher m = p.matcher("aaaaaab");
//匹配
boolean b1 = m.matches();
System.out.println(b1);
//第二种:
String s = "abc";
boolean b2 = s.matches("a*b");
System.out.println(b2);
//例:
// \\d 只对第一个字符串进行匹配
String s1 = "1234567";
System.out.println(s1.matches("\\d"));//false
// ? 表示一次或一次业没有
String s2 = "";
String s3 = "1";
System.out.println(s2.matches("\\d?")); //true
System.out.println(s3.matches("\\d?")); //true
//表示零次或多次
String s4 = "12345";
System.out.println(s2.matches("\\d*")); //true
System.out.println(s4.matches("\\d*")); //true
//表示至少一次或多次
System.out.println(s2.matches("\\d+")); //false
System.out.println(s3.matches("\\d+")); //true
System.out.println(s4.matches("\\d+")); //true
//表示n次
String s5 = "123";
System.out.println(s5.matches("\\d{5}"));//false
System.out.println(s4.matches("\\d{5}"));//true
//表示至少n次
System.out.println(s3.matches("\\d{3}"));//false
System.out.println(s5.matches("\\d{3}"));//true
System.out.println(s4.matches("\\d{3,}"));//true
//表示至少n次,至多m次
System.out.println(s4.matches("\\d{3,5}"));//true
System.out.println(s4.matches("\\d{3,4}"));//false
/*
[0-9] 表示数字
[^0-9] 表示非数字
[abc] 表示a或b或c
\\w 表示字母数字下划线
\\W 表示非\\w
\\. 表示任何字符 用\\.进行转义
[a-zA-Z] 或[A-z]:
例:手机格式,QQ格式,邮箱格式
*/
String phone = "15877485631";
String phone1 = "1421452352";
System.out.println(phone.matches("1[35789]\\d{9}"));//true
System.out.println(phone1.matches("1[35789]\\d{9}"));//false
String qq = "2460084043";
String qq2 = "0242364375";
System.out.println(qq.matches("[1-9]\\d{5,11}"));//true
System.out.println(qq2.matches("[1-9]\\d{5,11}"));//false
String email = "xin2460084043@163.com";
String email2 = "xidje1245235dwdk.com";
System.out.println(email.matches("\\w{6,20}@\\w{2,6}\\.(com|com\\.cn)"));//true
System.out.println(email2.matches("\\w{6,20}@\\w{2,6}\\.(com|com\\.cn)"));//false
}
}