什么是正则
正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"),可以用来描述和匹配字符串的特定模式。
正则表达式是一种用于模式匹配和搜索文本的工具。
正则表达式提供了一种灵活且强大的方式来查找、替换、验证和提取文本数据。
正则语法
验证地址
‣
特殊字符
- /exp/gm g表示全局匹配, m 表示多行匹配
- . 表示任意一个非换行符之外的任意一个字符
示例:
.at
表示任意一个前缀后跟at的字符,例如 bat, xat等a.t
表示任意一个at中间夹上任意一个字符的三个字符串,例如act, aet等at.
类似的意思- [] 方括号表示匹配方括号内的任意一个字符即可
示例
at[xy]
可以匹配 atx, atya[xy]t
可以配置 axt, ayt[xy]at
可以配置xat,yat以后类似的可以放在任意位置的示例就举例一个就行。
方括号内可以使用中划线表示范围,例如
[a-z]表示所有的小写字母
[A-Z]表示所有的大写字母
[0-9]表示有的数字 \d 同理 \D 表示取反
- \w 表示字母或数字和下划线 \W 表示取反
- at[a-zA-Z0-9] 表示at后面跟上一个小写字母或者大写字母或者数字
- \s 表示匹配空白字符 空格,tab 回车 \S 取反
- ^ 在方括号内
最前面加一个^表示对方括号的表达式取反,例如 at[^a-z] 表示匹配非小写字母即可匹配, 如果
在方括号外面则表示匹配一行的开头,例如 ^a 表示以a开头的行.
- \ 表示转义,例如 . 表示一个任意字符 \. 就表示 . 本身
- $ 表示结尾,例如表示以 . 结尾的地方 \.$ 即可, 例如匹配某一行只有at. 可以使用 ^at\.$
- \b 表示单词的边界, 例如 \bin 表示匹配in开头的单词, in\b 表示匹配in结尾的部分 \bin\b 表示匹配in单词.
- \B 则和上面取反, 表示非边界
量词
- + 表示前面的字符出现了一次或多次, 例如 at+ 表示t出现了至少一次,at, att, attttttt
- * 表示0次或者多次
- ? 表示0次或者1次
- {n} 表示出现n次 例如,at{3} 表示匹配 attt 即t出现3次的情况, at{3,} 表示匹配3次以上,由于贪婪模式,导致可以匹配后面无限多个t, 可以在花括号后面加一个? 表示非贪婪模式,at{3,}?, at{3,5} 表示匹配3到5次
分组
(at){3}
表示匹配at整体出现3次,括号表示整体
- 匹配pattern单词,无论首字母大小写均可,
[pP]attern
或者(p|P)attern
捕获
- 依赖分组,例如匹配多中日期格式
\d{4}[-/\.=]?\d{1,2}[-/\.=]?\d{1,2} 2024-05-01 2024/05/02 2024.05.03 20240504 2024=05=05 对上面的表达式分组,捕获年月日 (\d{4})[-/\.=]?(\d{1,2})[-/\.=]?(\d{1,2}) 替换为统一格式使用 月日年, $1,2,3 分别表示匹配上面的第1,2,3个小括号内捕获的内容。 $2-$3-$1 05-01-2024 05-02-2024 05-03-2024 05-04-2024 05-05-2024 如果分组后不想使用捕获功能,可以使用?: 标示, 例如不想捕获月份信息 (\d{4})[-/\.=]?(?:\d{1,2})[-/\.=]?(\d{1,2}) 那么$1,2 就会分别表示年份和日期, 不会有月份信息了。
引用
- 匹配开头和结尾相同字母的单词
\b([a-z])[a-z]*\1\b 前后的两个\b 表示匹配的是一个单词 \1 表示引用第一个分组 可以匹配到 agdfdsa alibaba tencent
前瞻后顾
示例数据
$100 $139 $abff $jjdjkd %224 &1333
- 匹配后面是数字的$符号
\$(?=\d+)
\$ 表示$本身, ?= 表示正向前瞻,即 \d+ 匹配true的场景, 匹配到了前2个$符号
- 匹配后面是非数字的$ 符号
\$(?!\d+)
?! 表示对括号内的内容取反, 负向前瞻。
- 匹配$后面的数字
(?<=\$)\d+
?≤ 表示正向顾后,即匹配100 和 139
- 如果把=号替换成! 号表示取反
(?<!\$)\d+
,即非$ 后面的数字, 这里匹配的是 00 和 39, 如果希望匹配的是数字整体而不是一部分,可以用 \b 来表示边界,(?<!\$)\b\d+\b
可以匹配224 和 1333
版本问题
有些特性可能在不同的语言中可能不支持,需要注意不一定是表达式本身的问题。