目录
简介
正则表达式是 字符串模式匹配 的技术,一般在使用的时候都会写一个 模式串,比如regStr,然后在s串中找和regStr相匹配的串, 比如查找一个html文本中的某些关键字段的值,比如浏览量,点赞量等;或者说判断s串符不符合regStr的格式要求,也就是校验字符串,判定字符串是否合法,比如是不是邮箱,是不是电话号码等。
正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。
各个语言中都会有正则表达式的应用,下面会有Java的Demo。
正则表达式 – 简介 | 菜鸟教程
元字符介绍
字符匹配符
限定符
主要用来限定字符 (组合) 出现的次数
注意 [] 和 () 含义是不一样的, ()里面的字符要作为一个整体被使用,[] 是可选的列表。
定位符
结尾限定符是针对整个字符串
选择匹配符
常用的几个正则表达式
[a-z] // 匹配所有的小写字母 [A-Z] // 匹配所有的大写字母 [a-zA-Z] // 匹配所有的字母 [0-9] // 匹配所有的数字[\u4e00-\u9fa5] // 匹配中文字符
[1-9]\d{5} // 邮政编码
腾讯QQ号:[1-9][0-9]{4,9} (腾讯QQ号从10000开始)
密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$
正则表达式匹配原理
详解正则表达式匹配算法原理_ybdesire的博客-CSDN博客_正则表达式匹配原理
Java Demo
java.util.regex包主要包括 Pattern类和Matcher类。
●Pattern类
pattern对象是一个正则表达式对象。Pattern类没有公共构造方法。要创建一个Pattern对
象,调用其公共静态方法,它返回一个Pattern对象。该方法接受一个正则表达式作为它的第
一个参数,比如:Pattern pattern = Pattern.compile(regStr);
●Matcher类
Matcher对象是对输入字符串进行解释和匹配的引擎。与Pattern类一样,Matcher也没有
公共构造方法。你需要调用Pattern对像的matcher方法来获得一个Matcher对像
匹配汉字、邮政编码、QQ号码和手机号码
public class RegExpDemo {
public static void main(String[] args) {
String content = "一二三四五";
// String content = "";
// 汉字
String reg = "^[\u4e00-\u9fa5]+$"; // 至少有一个汉字字符
Pattern pattern = Pattern.compile(reg);
Matcher matcher = pattern.matcher(content);
if(matcher.find()){
System.out.println("满足格式");
}else{
System.out.println("不满足格式");
}
// 邮政编码格式 注:满足格式不一定就是邮政编码
String regyzCode = "^[1-9]\\d{5}$"; // 1 打头 有6位
// qq 号格式 不能0打头 有长度限制
String regQQCode = "^[1-9]\\d{4,9}$";
//手机号码
String phoneNumber = "17857917309";
String regPhoneCode = "^1[3|4|5|8]\\d{9}$";
pattern = Pattern.compile(regPhoneCode);
matcher = pattern.matcher(phoneNumber);
if(matcher.find()){
System.out.println("满足格式");
}else{
System.out.println("不满足格式");
}
}
}
匹配合法的URL
public class RegExpDemo {
public static void main(String[] args) {
// String content = "https://www.bilibili.com/video/BV1Eq4y1E79W?p=17&spm_id_from=pageDriver&vd_source=aa9ba225f33182b05cbf71";
String content = "https://blog.csdn.net/dalei9243/article/details/84835895";
// http/https ://
// 只有英文 数字 不允许有 中文字符
// 长度限制 不同浏览器不一样
String reg = "^(http(s)?://)?([\\w-]+\\.)+[\\w-]+(/[\\w-?=&/%.#]*)$";
Pattern pattern = Pattern.compile(reg);
Matcher matcher = pattern.matcher(content);
if(matcher.find()){
System.out.println("满足格式");
}else{
System.out.println("不满足格式");
}
}
}