正则表达式迷路了?看这一文就够了!

前言

对于正则表达式,相信很多人都知道,但是很多人的第一感觉就是难学,因为看第一眼时,觉得完全没有规律可寻,而且全是一堆各种各样的特殊符号,完全不知所云。

其实只是对正则不了解而以,了解了你就会发现,原来就这样啊正则所用的相关字符其实不多,

也不难记,更不难懂,唯一难的就是组合起来之后,可读性比较差,而且不容易理解。

什么是正则表达式

正则表达式是一种特殊的字符串模式,用于匹配一组字符串,就好比用模具做产品,而正则就是这个模具,定义一种规则去匹配符合规则的字符。

巧用正则解决实际问题

场景一:

在 csdn 复制代码会自带序号,如何快速去掉

场景二:

编辑 word 文档,经常会查找字符串

正则表达式在 Java 中的应用

场景一:

HttpServlet 的 url 配置

场景二:

SpringMVC 的 url 配置等框架

场景三:

不规则数据的内容分析(爬虫、文档解析)

正则表达式其实并不是那么难

难懂的主要原因

1、可读性不强

2、一句话包含 N 种逻辑

正则表达式组成

1、边界符

^ 开始符
$ 结束符
[] 单字符
() 分组
- 区间 a-z、A-Z、0-9

2、转义符

\b Break、打破,单词边界
\w Word、单词字母数字组合
\d Digit、数字
\s Space、空格
\t Table、制表符
\n NewLine、换行
\r Retun、回车

3、计量符

* (贪婪) 重复零次或更多(任意),文件选择器*.png
+ (懒惰) 重复一次或更多次(至少重复一次),网页中的计数 1W+
? (占位) 重复零次或一次(可有可无),java 中预编译语句集
{n} 重复 n 次
{n,m} 重复 n 到 m 次(至少重复 n 次,最多重复 m 次)
{n,} 重复 n 次或更多次(大于等于 n 次)

4、逻辑符

逻辑或
= 逻辑等于(环视肯定顺序)
? (占位) 重复零次或一次(可有可无),java 中预编译语句集
! 逻辑非(环视否定顺序)
<= 环视肯定逆序
<! 环视否定逆序

正则表达式引擎的内部工作机制

总是从左往右一次匹配

常用的正则举例

匹配 html 标签 <[^>]+>

匹配中文字符[\u4E00-\u9FA5\uF900-\uFA2D]+

正则表达式的高级用法

肯定顺序常规: [a-z]+(?=;) 字母序列后面跟着;

肯定顺序变种: (?=[a-z]+ ) . + ).+ 字母序列

肯定逆序常规: (?<=:)[0-9]+ :后面的数字

肯定逆序变种: \b[0-9]\b(?<=[13579]) 0-9 中的奇数

否定顺序常规: [a-z]+\b(?! ; ) 不以;结尾的字母序列

否定顺序变种: (?!.*?[lo0])\b[a-z0-9]+\b 不包含 l / o / 0 的字母数字系

否定逆序常规: (?<!age)=([0-9]+) 参数名不为 age 的数据

否定逆序变种: \b[a-z]+(?<!z)\b 不以 z 结尾的单词

一、肯定顺序环视常规用法

源字符串:

notexefile1.txt

exefile1.exe

exefile2.exe

exefile3.exe

notexefile2.php

notexefile3.sh

需求:获取.exe 后缀文件不含后缀的文件名

正则:.+(?=.exe)

结果:

exefile1

exefile2

exefile3

二、否定顺序环视

源字符串:

notexefile1.txt

exefile1.exe

exefile2.exe

exefile3.exe

notexefile2.php

notexefile3.sh

需求:获取不是.exe 后缀文件不含后缀的文件名正则:(.+)(?!.exe).[^.]+$结果:

notexefile1

notexefile2

三、肯定逆序环视

源字符串:

name=Zjmainstay

age=26

需求:获取 name 参数的值

正则:(?<=name=).+

示例很直白,前面必须是 name=,然后获取其后面的数据,由于环视不占位,因此并没有出现在匹配结果中。

四、否逆序环视

源字符串:

name=Zjmainstay

age=26

需求:获取不是 name 参数的值

正则:[=]+=(?<!name=)(.+)

跟否定顺序示例一样,我们不能直接用(?<!name=).+进行匹配,正则做法是先把参数部分匹配出来,再用否定逆序环视对它进行限定,限定它不能是 name=,因此实现匹配。

实际应用 innerText

a test

(?<=

)[^<]+(?=
)

后记

end!~

发布了48 篇原创文章 · 获赞 5 · 访问量 2282

猜你喜欢

转载自blog.csdn.net/qq_34361283/article/details/104088566