正则表达式: 正则表达式用于操作字符串数据 。
如果要找正则表达式的规则
参考:
https://blog.csdn.net/chuxin_mm/article/details/85061213
先举个栗子吧:
/**
* @author: wangqinmin
* @date: 2018/12/11 14:51
* @description: 正则
*/
public class DemoTest {
public static void main(String[] args) {
/**
* 需求:对QQ号进行校验
* 要求:长度必须5~15位, 只能是数字,0不能开头
*/
checkQq("E128545848");
/**
* 第一位数:1-9
* 后面的数:0-9,可以有4到14个数据
*/
checkRegexQq("[1-9][0-9]{4,14}", "0128545848");
}
/**
* 常规方法
*
* @param qq
*/
public static void checkQq(String qq) {
int length = qq.length();
if (length < 5 && length > 15) {
System.out.println("QQ号长度不正确");
return;
}
if (qq.startsWith("0")) {
System.out.println("QQ号不能以0开头");
return;
}
try {
Long.parseLong(qq);
} catch (NumberFormatException e) {
System.out.println("QQ号只能是数字");
return;
}
System.out.println("QQ号校验成功");
}
/**
* @param regex 定义QQ号的规则 (正则表达式)
* @param qq QQ号
*/
public static void checkRegexQq(String regex, String qq) {
if (qq.matches(regex)) {
System.out.println("QQ号校验成功");
} else {
System.out.println("QQ号格式不正确");
}
}
}
但是又发现一个问题 :
缺点 :
1. 正则只能提示正确 与 错误, 不会提示原因。
2. 阅读性较差,如果不会正则的人,是看不懂的额。
先来学习正则常用的规则吧,后面写一个正则的使用详尽提示 (反正正则使用起来很方便)
这里写一些常用的 并做一些解释:
字符类
[abc] a、b 或 c(简单类) -- 如果用中括号abc,就表示字符串中的某一位,只能是a或者b或者c
比如正则为: [abc]
那么:
a -- 正确
b -- 正确
c -- 正确
其他全部错误
public static void main(String[] args) {
String regex = "[abc]";
String str = "a";
// true
System.out.println(str.matches(regex));
}
[^abc] 任何字符,除了 a、b 或 c(否定) -- 也就是说,除了abc都可以
比如正则为: [^09123abc] -- 也就是说,除了09123abc这些字符,其他都可以
public static void main(String[] args) {
String regex = "[^09123abc]";
String str = "a";
// false
System.out.println(str.matches(regex));
}
剩下的不想写了,我感觉 https://blog.csdn.net/chuxin_mm/article/details/85061213
上面那篇博客,我已经解释的很清楚了
不过正则里面的 () | & [] {} 是有范围的:
[] : 表示的是一个范围的一个字符
() : 表示的是一组规则的一个字符
{} : 表示的是一个规则的字符个数
| : 表示并集的意思
& : 表示交集的意思
^ : 行的开头 (我不习惯用这个,和下面这个。应该是正则还没有理解到位吧)
$ : 行的结尾
写一个例子:
只能分开写,一起写还是比较困难
public static void main(String[] args) {
/**
* 不能以0开头
* 只能是数字
* 5-15位
* 至少有4个0
*/
判断前3个条件
System.out.println("11101011001".matches("[1-9][0-9]{4,14}"));
判断最后一个条件
System.out.println("11101011001".matches("[1-9]\\d*([1-9]+0|0){4,}\\d*"));
}