正则表达式
规则字符在:java.util.regex Pattern类中
字符:
构造 | 匹配 |
---|---|
x | 字符 x |
\ | 反斜线字符 |
\r | 回车符 (‘\u000D’) |
字符类
构造 | 匹配 |
---|---|
[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 | 单词边界(就是不是单词字符的地方) |
数量词
构造 | 匹配 |
---|---|
X? | X,一次或一次也没有 |
X* | X,零次或多次 |
X+ | X,一次或多次 |
X{n} | X,恰好 n 次 |
X{n,} | X,至少 n 次 |
X{n,m} | X,至少 n 次,但是不超过 m 次 |
正则表达式的应用
判断功能
/*
* 需求:
* 判断手机号是否满足需求?
*/
import java.util.Scanner;
public class RegeDemo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入手机号码:");
String phone = scanner.nextLine();
//手机号码的限制
String regex = "1[38]\\d{9}";
//调用功能,返回即可
boolean flag = phone.matches(regex);
//输出结果
System.out.println("flag:"+flag);
}
}
邮箱判断
/*
* 判断邮箱
*
*/
public class RegeDemo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入邮箱:");
String email = scanner.nextLine();
//邮箱的限制
// String regex = "[a-zA-Z_0-9]+@[a-zA-Z_0-9]{2,6}(\\.[a-zA-Z_0-9]{2,3})+";
String regex = "\\w+@\\w{2,6}(\\.\\w{2,3})+";
//调用功能,返回即可
boolean flag = email.matches(regex);
//输出结果
System.out.println("flag:"+flag);
}
}
分隔功能
/*
* 分隔功能
* String的public String
*/
public class RegexDemo {
public static void main(String[] args) {
//定义一个年龄范围
String ages = "18-24";
//定义规则
String regex = "-";
//调用方法
String[] strArray = ages.split(regex);
//遍历
for(int x= 0; x<strArray.length; x++) {
System.out.println(strArray[x]);
}
int startAge = Integer.parseInt(strArray[0]);
int endAge = Integer.parseInt(strArray[1]);
}
}
/*
* 分隔功能
*/
public class RegexDemo {
public static void main(String[] args) {
String s1 = "aa,bb,cc";
String[] str1Array = s1.split(",");
for(int x = 0;x < str1Array.length;x++) {
System.out.println(str1Array[x]);
}
System.out.println("----------------");
String s2 = "aa.bb.cc";
String[] str2Array = s2.split("\\.");
for(int x = 0;x < str2Array.length;x++) {
System.out.println(str2Array[x]);
}
System.out.println("----------------");
String s3 = "aa bb cc";
String[] str3Array = s3.split(" +");
for(int x = 0;x < str3Array.length;x++) {
System.out.println(str3Array[x]);
}
System.out.println("----------------");
//硬盘上的路径,我们应用\\代替\
String s4 = "E:\\java\\javaweb全\\day09\\day09_res";
String[] str4Array = s4.split("\\\\");
for(int x = 0;x < str4Array.length;x++) {
System.out.println(str4Array[x]);
}
System.out.println("----------------");
}
}
获取功能
获取功能
正则表达式的编译表示形式。
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
public class RegexDemo {
public static void main(String[] args) {
//将给定的正则表达式编译成模式对象
Pattern p = Pattern.compile("a*b");
//通过模式对象得到匹配对象
Matcher m = p.matcher("aaaaab");
// 调用匹配器的功能
boolean b = m.matches();
System.out.println(b);
//
String string="aaaaab";
String regex = "a*b";
boolean bb = string.matches(regex);
System.out.println(bb);
}
}