正则表达式的引入
/*
- 正则表达式
- 验证qq号码是否符合规则
- 1.必须是5-10位
- 2.0不可以作为qq号的开头
public class RegexDemo01 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入一个QQ号:");
String qq = input.next();
if (checkQQByRegex(qq)) {
System.out.println("合法QQ");
} else {
System.out.println("非法QQ");
}
}
public static boolean checkQQ(String qq) {
boolean flag = true;
// 保证5-10位
if (qq.length() >= 5 && qq.length() <= 10) {
// 保证不是0开头
if (!qq.startsWith("0")) {
// 保证是数字
char[] chs = qq.toCharArray();
for (int i = 0; i < chs.length; i++) {
char c = chs[i];
if (!(c >= '0' && c <= '9')) {
flag = false;
break;
}
}
} else {
flag = false;
}
} else {
flag = false;
}
return flag;
}
public static boolean checkQQByRegex(String qq) {
String regex = "[1-9][0-9]{4,9}";
return qq.matches(regex);
}
}
概念: 使用单个字符串来描述/匹配一系列符合某个语法规则的字符串
在Java里面来学习正则表达式的目的主要就是使用正则表达式来处理字符串复杂的查找 find/替换replace/匹配matches/分割split工作
使用步骤
1.通过大量的字符串找规律定义规则
2.使用这种规则去匹配新的字符串
3.匹配成功作出相应的操作(匹配 查找 替换 分割)
工具: https://regexper.com/
正则表达式由两种基本字符组成
原义字符:字符本身就是一个正则 \t \n \r \f
元字符: * + ? $ ^ () [] {}…
对正则表达式进行分类
字符类: [abc] 将字符进行归类,可以出现[]中的其中一个 对abc其中一个进行匹配
[^abc] 对不是abc的字符进行匹配
范围类:
[a-z] 表示代表a-z中的一个字符
表示所有的英文字母和数字 [a-zA-Z0-9]
预定义类:
\d == [0-9] 数字
\D == [^0-9] 非数字
空白字符:[ \t\n\x0B\f\r] == \s
[^ \t\n\x0B\f\r] == \S
[a-zA-Z0-9] \w
[^a-zA-Z0-9] \W
. 任何字符(与行结束符可能匹配也可能不匹配)
边界字符
^:以XXX开头
$:以XXX结尾
\b:单词边界
\B:非单词边界
量词
?:出现0次或者1次
+:出现1次或者多次
*:出现任意次
{n}:出现正好n次
{n,m}出现n-m次
{n,}出现至少n次
分组 ()
如何让Jack出现至少3次
(Jack){3,}
忽略分组:每一组能够分组,但是没有编号 ?:
或
Ja(ck|Love)Kitty
反向引用
利用分组的编号进行反向引用
反向引用使用$,必须先分组
2018-04-27 ==> 04/27/2018
正则表达式在Java中的应用总结
1.字符串查找操作 Pattern和Matcher
2.字符串匹配操作 字符串的matches()方法
3.字符串替换操作 字符串的replaceAll()和replaceFirst()方法
4.字符串分割 split() 方法