正则表达式

正则表达式

符合正则规范的表达式叫做正则表达式。正则表达式其实就是由文本和字符串组成字符串

(一)常用文档
字符 含义
× 字符x
// 反斜线字符
/t 制表符(水平制表)
/n 换行符
/r 回车符
/e 转义符
. 任意字符
字符类 含义
[a|b|c] a或b或c
[^abc] 任何字符,除了a、b或c
[a-zA-Z] a到z或A到Z(包含a、z、A、Z)
[a-d[m-p]] a到d或m到p
[a-z&&[def]] d或e或f(交集)
[a-z&&bc] a到z,除了b和c(减去)
a-z&&m-p a到z,除去m到p(减去)
预定义字符类 含义
. 任何字符
/d 数字,[0-9]
/D 非数字
/s 空白字符,[/t、/n、/x0B、/f、/r]
/S 非空白字符
/w 单词字符,[a-zA-Z 0-9]
/W 非单词字符
Greedy数量词 含义
x? x:一次或者一次也没有
x* x:零次或多次
x+ x:一次或多次
x{n} x:恰好n次
x{n,} x:至少n次
x{n,m} x:n到m次
Reluctant 数量词 含义
X?? X,一次或一次也没有
X*? X,零次或多次
X+? X,一次或多次
X{n}? X,恰好 n 次
X{n,}? X,至少 n 次
X{n,m}? X,至少 n 次,但是不超过 m 次
边界匹配器 含义
^ 行的开头
$ 行的结尾
/b 单词边界
/B 非单词边界
/A 输入的开头
/G 上一个匹配的结尾
/Z 输入的结尾,仅用于最后的结束符(如果有的话)
/z 输入的结尾
(二)替换字符串
java 复制代码
//替换手机号
public class test01 {
    public static void main(String[] args) {
        String str = "王一13421643043";
        String regex = "(1\\d{2})(\\d{4})(\\d{4})";//正则表达式:一个中括号为一组,组内d{n}表示组内n个字符串
        str = str.replaceAll(regex, "$1****$3");//$n:第n组   $1****$3:保留第1组和第3组,中间的替换为****
        System.out.println(str);//王一134****3043
​
    }
}
(三)验证字符串

Pattern:代表正则表达式的匹配模式

Matcher:提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持

java 复制代码
//验证QQ邮箱
public class test02 {
    public static void main(String[] args) {
        String str = "3871249382@qq.com";
        String regex = "\\d{5,10}@qq.com";//正则表达式:由5到10位的数字以及@qq.com组成
        boolean matches = str.matches(regex);//验证QQ邮箱是否符合正则表达式
        System.out.println(matches);//true
    }
}
(四)分割字符串
java 复制代码
//分割地址
public class test03 {
    public static void main(String[] args) {
        String str = "F:\\_JY\\_QF\\知识点\\IMGS\\变量.png";
        String regex = "\\\\";//以\\为分割点
        String[] split = str.split(regex);//进行分割
        for (String s : split){
            System.out.println(s);
        }
    }
}
(五)爬取数据

Pattern:代表正则表达式的匹配模式

Matcher:提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持

java 复制代码
//Pattern+Matcher 找到前端代码中的图片路径
public class test04 {
    public static void main(String[] args) {
        String str = "<img src = 'hhy/aaa.jpg'/><div><div/> <input type='image' src='submit.gif' /><img src = 'bbb.jpg'/>";
​
        //正则表达式字符串
        String regex = "<img\\s*\\bsrc\\b\\s*=\\s*('|\")?([^'\"\n\r\f>]+(\\.jpg)\\b)('|\")?/>";//对照上述文档,识别上述Src的字符串
​
        //正则表达式对象
        Pattern pattern = Pattern.compile(regex);
​
        //利用正则表达式对象解析字符串,返回解析对象
        Matcher matcher = pattern.matcher(str);
​
        //查询结果
        while (matcher.find()){
            String group = matcher.group(2);
            System.out.println(group);
        }
    }

总结:

正则表达式不需要写,但是需要能够会通过上述常用文档认出相关正则表达式含义

相关推荐
无为之士6 分钟前
Linux自动备份Mysql数据库
linux·数据库·mysql
小汤猿人类19 分钟前
open Feign 连接池(性能提升)
数据库
阳冬园40 分钟前
mysql数据库 主从同步
数据库·主从同步
XiaoH2331 小时前
培训机构Day15
sql·mysql
ThisIsClark1 小时前
【后端面试总结】MySQL主从复制逻辑的技术介绍
mysql·面试·职场和发展
Mr.132 小时前
数据库的三范式是什么?
数据库
Cachel wood2 小时前
python round四舍五入和decimal库精确四舍五入
java·linux·前端·数据库·vue.js·python·前端框架
Python之栈2 小时前
【无标题】
数据库·python·mysql
风_流沙2 小时前
java 对ElasticSearch数据库操作封装工具类(对你是否适用嘞)
java·数据库·elasticsearch
亽仒凣凣2 小时前
Windows安装Redis图文教程
数据库·windows·redis