正则表达式的引入
学习目的:
- 为什么需要学习正则?
- 正则语法
- 正则在Java当中的实用
主要作用在数据校验和字符串处理
需求:验证QQ号
- QQ号必须5~10位的数字
- 数字0不能作为开头
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 <= '0')) {
flag = false;
break;
}
}
} else {
flag = false;
}
} else {
flag = false;
}
return flag;
}
public static boolean checkQQByRegex(String qq) {
return qq.matches("[1-9][0-9]{4,9}");
}
正则表达式的基本语法
概念:使用单个单词字符串来描述/匹配一系列符合某个语法规则的字符串
字符类:
[abc] 将字符进行归类,可以出现[]中的其中一个对abc其中一个进行匹配
[^abc] 对不是abc的字符进行匹配
范围类:
[a-z] 表示代表a-z中的一个字符
表示所有英文字母和数字[a-zA-Z0-9]
预定义类:
\d == [0-9] 数字
\D ==[^0-9] 非数字
空白字符,[ \t\n\x08\f\r] == \s
[^ \t\n\x08\f\r] ==\S
[a-zA-Z0-9] \w
[^a-zA-Z0-9] \W
任何字符(与行结束符有可能匹配也可能不匹配)
量词:
?:出现0次或者1次
+:出现1次或者多次
*:出现任意次
{n}:出现正好n次
{n,m}出现n-m次
{n,}出现至少n次
正则的表达式Java中应用
正则在Java当中的应用
在Java里面来学习正则表达式的目的主要就是使用正则表达式来处理字符串复杂的
- 查找 find Pattern 和 Matcher
- 替换replace replaceFirst relaceAll
全文捡索,满足条件即可替换 - 匹配matches matches
完全匹配 - 分割split工作 split
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
* 正则表达式对象 Pattern
* 匹配器对象 Matcher
*/
public class RegexDemo04 {
public static void main(String[] args) {
//原声写法
String regex = "x?yz";
String s = "yz";
boolean matches = s.matches(regex);//匹配yz
System.out.println(matches);
//Pattern和Matcher
//将正则表达式字符串封装成为正则表达式对象
Pattern p = Pattern.compile(regex);
//通过正则表达式对象创建对应的匹配器对象
Matcher m = p.matcher(s);
//通过匹配器匹配,匹配成功可以有更多的方法来操作字符串
boolean mat = m.matches();
System.out.println(mat);
}
}