正则表达式小计
单个匹配
.⬅ 匹配任意一个字符,可以说是什么都匹配
💻 .3.
a123.doc ✔️
123.doc ✔️
1131.xls ✔️
3111.doc ❌
- 特殊字符,在正则表达式中有特殊意义的字符,
. ] [ \等
💻 Arrays[0]
Arrays[0] ❌ 并不会匹配,此时正则匹配的是 Arrays0
💻 Arrays\[0\]
Arrays[0] ✔️ 用转意字符转换后可以按要求识别
\.⬅ 转意字符\配合表达.这个本意,\\表达的是预展示\,\必须后接字符,否则会报错
💻 .3\.
a123.doc ✔️
123.doc ✔️
1131.xls ❌
3111.doc ❌
[ ]⬅ 匹配多个字符中的某一个
💻 [ab]ns\.xls
ans.xls ✔️
bnc.xls ❌
anns.xls ❌
bns.doc ❌
[ - ]⬅ 匹配集合区间,在顺序上需要后部大于前部,且大小写敏感[3-1]无意义且会失效
🏁 [A-Za-z0-9] 等效于 [ABCDEFGHIJKLMNOPQRSTUVWXYZabcdenfghijklmnop
qrstuvwxyz0123456789]
💻 [A-Za-z0-9]ns\.xls
ans.xls ✔️
bnc.xls ❌
anns.xls ✔️
bns.doc ❌
[^ ]⬅ 匹配对条件的取余,^将作用于整个集合区间 即[ ]内全部展示集合区间
💻 [A-Za-z]ns[^0-9]\.xls
ansS.xls ✔️
bnc1.xls ❌
anns1.xls ❌
bnsX.doc ❌
- 空白元字符,Windows 系统中用
\r\n表达换行,Linux 或 Unix 系统用\n\n表达
[\b] 回退(并删除)一个字符
\f 换页符
\n 换行符
\r 回车符
\t 制表符(Tab键)
\v 垂直制表符
\s\S⬅ 匹配一个空白字符 或 非空白字符,注意\b是不被包含在内的
\s ⬅ [\f\n\r\t\v] 匹配任意一个空白字符
\S ⬅ [^\f\n\r\t\v] 匹配任意一个非空白字符
\d\D⬅ 匹配一个数字 或 非数字
\d ⬅ [0-9] 匹配任意一个数字字符
\D ⬅ [^0-9] 匹配任意一个非数字字符
\w\W⬅ 匹配一个字母和数字 或 非字母和数字
\w ⬅ [A-Za-z0-9] 匹配任意一个大、小写字母或数字字符或一个下划线
\W ⬅ [^A-Za-z0-9] 匹配任意一个非 大、小写字母或数字字符或一个下划线
\x⬅ 匹配十六进制\0⬅ 匹配八进制
💻[\x0A]
10(换行符)
💻[\011]
9(制表符)
**注意,以上是贪婪匹配,此处提示懒惰匹配** 贪婪匹配是在一段匹配字符中,找出所有与语句相匹配的字符,而懒惰匹配则只找出第一个与语句匹配的字符
- 懒惰匹配对应语句
+?*?{3,}?与之对应的是只匹配第一个符合条件的字符
重复匹配
- 在以上单一匹配中任意语法后加
+即可升级为匹配一个或多个语法(不能匹配零个字符)
💻 \w+@\w+\.\w+
abc@123.com ✔️
13a@67b.c12 ✔️
156@1cc.213 ✔️
abc.doo@233.com ❌
💻 [\w.]+@\w+\.\w+ //将匹配的范围 `\w` 中增加一个 `.` 再进行匹配
abc.doo@233.com ✔️
- 在以上单一匹配中任意语法后加
*即可升级为匹配零个、一个或多个语法,如需匹配*本身用\*
💻 \w[\w.]+@\w+\.\w+
abc.doo@233.com ✔️
a@233.com ❌
💻 \w[\w.]*@\w+\.\w+
abc.doo@233.com ✔️
a@233.com ✔️
- 在以上单一匹配中任意语法后加
?即可升级为匹配零个或一个语法,如需匹配?本身用\?
💻 \w\w?@[\w]+\.[\w]+
a@233.com ✔️
ab@233.com ✔️
abc@233.com ❌
- 在以上单一匹配中任意语法后加
{6}即可限定前方最近匹配语法的重复次数,注意这个范围只有一个匹配语法,如需匹配{}本身用\{\}
💻 \w{1}@[\w]+\.[\w]+
a@233.com ✔️
💻 \w{2}@[\w]+\.[\w]+
ab@233.com ✔️
💻 \w{3}@[\w]+\.[\w]+
abc@233.com ✔️
💻 {2} //此重复语法前最近的一个匹配语法是 ;
; ✔️
❌
{A,B}⬅ 也可以用此种方式设定重复的最少次数 A 和重复最多次数 B ,用法同上
💻 \w{2,3}@[\w]+\.[\w]
a@233.com ❌
ab@233.com ✔️
abc@233.com ✔️
abcd@233.com ❌
{C,}⬅ 也可以用此种方式只设定最少重复 C 次,至于最多重复次数没规定 ,用法同上
边界、子表达式
\b⬅ 表示一种边界,\b匹配的是\w和\W之间,也就是构成单词的字符与不能构成单词的字符之间,匹配的是之间
mint is a flower
💻 int\b
✔️ int //实际上应该显示 mint,此处显示的是,从 \w 到 \W 之间的空隙
💻 \bmin
✔️ min //实际上应该显示 mint,此处显示的是,从 \W 到 \w 之间的空隙
\B⬅ 也表示一种边界,\B匹配的是不能构成单词的字符与不能构成单词的字符之间,匹配的也是之间
mint is a flow---er
💻 \B-\B
✔️ - //此时只有中间的连字符被匹配
mint is a flow --- er
💻 \B-\B
✔️ --- //此时三个连字符都被匹配
^⬅ 字符串的开始边界,其只有在[^ ]中,且如下[^形式时才是取余语法
// <?xml>标签前允许出现空格、制表符、换行符等空白字符
<?xml version="1.0" encoding="UTF-8" ?>
💻 ^\s*<\?xml.*\?>
$⬅ 字符串的结束边界
<html>
💻 <[Hh][Tt][Mm][Ll]>\s*$
(?m)⬅ 分行匹配,就例子来说并没有什么用,再研究( )⬅ 子表达式,
💻 ( ){2}
; ❌
✔️
[12.159.46.200]
💻 \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
💻 (\d{1,3}\.){3}\d{1,3}
- 子表达式的嵌套
[12.159.46.200]
💻 (\d{1,3}\.){3}\d{1,3}
💻 (((25[0-4])|(2[0-4]\d)|(1\d{2})|(\d{1,2}))\.){3}
((25[0-4])|(2[0-4]\d)|(1\d{2})|(\d{1,2}))
|在正则表达里表示 或 的概念
回溯引用、前后查找
- 回溯引用就是在匹配语句后 以
\1 \2 \3 ……的形式,引用前面从前向后排的子语句,一般由( )括起来的是子语句
what a long long day, just in the the only one day.
💻 [ ]+(\w*)[ ]+\1
💻 ([ ]+)(\w*)\1\2
💻 <[hH]([1-6])>.*</[hH]\1>
<h1>hello</h1> ✔️
<H2>hess</H2> ✔️
<h3>oooh<h2> ❌
<h2>ohoo<h3> ❌
<H1>omn</h1> ✔️
- 回溯使用,
回溯引用的子语句,可以在替换模式下使用 $1 $2 $3 ……
\E 结束 \L 或 \U 的转换
\l 把下一个字符转换成小写
\L 把\L到\E之间的字符全部转换成小写
\u 把下一个字符转换成大写
\U 把\U到\E之间的字符全部转换成大写
(?=abc)⬅ 向前查找,查找到向前语法匹配的字符之前,不包含匹配字符
💻 .+(:) //消费型,即普通查找
https: ✔️
http: ✔️
ftp: ✔️
💻 .+(?=:) //非消费型,即向前查找模式,不包含查找的字符
https ✔️
http ✔️
ftp ✔️
(?<=abc)⬅ 向后查找,查找到向后语法匹配的字符之后,不包含匹配字符
abc //此处的abc代指一些语句
向前查找
💻 a(?=b) 匹配到 b 为止,然后匹配到的文本是 a ,此时 b 被丢弃
向后查找
💻 (?<=b)c 匹配到 c 为止,然后匹配到的文本是 c ,此时 b 被丢弃
💡 注意 👆
向前查找的长度可变,向后查找只能是固定长度
- 向前、向后查找混合使用
<h1>helo my friend</h1>
💻 (?<=\<[hH][1-6]>).*(?=</[hH][1-6]>)
- 向前取非 即 向前查找取非 ,在向前查找后 选中 非查找条件的值
与 向前查找 对应的 向前取非
(?=) (?!)
hello a30d and 40
💻 \d+(?!d) //此处取 3 40
💻 \b\d+(?!d)\b //此处取 40
- 向后取非 即 向后查找取非 ,在向后查找后 选中 非查找条件的值
与 向后查找 对应的 向后取非
(?<=) (?<!)
hello a30d and 40
💻 \d+(?<!a) //此处取 30 40
💻 \b\d+(?!d)\b //此处取 40
嵌入条件
一些程序不支持。
Copyright © 2023 XLab·水星社
本文以“署名—非商业性使用—禁止演绎 4.0 国际(CC-BY-NC-ND 4.0)”协议发布,转发必须保留上文原作者信息,网站引入广告视作商业性使用。