最近在看鸟哥 Linux,看到正则表达式这块,以前看到这些恐怖的字符总是觉得恶心,今天就咬牙系统的学习了下正则表达式。然后有了这篇笔记。主要总结正则表达式的一些关键知识点。
- 字面值:
a b c d 1 2 3 4
等等。 - 字符类:
. [abc] [a-z] \d \w \s
.
表示“任何字符”[abc]
括号表示“找到集合里任意一个字符”。\d
表示“一个数字”,等同于[0-9]
\w
表示“一个单词字符”,等同于[0-9A-Za-z_]
\s
表示“一个空格,tab,回车或一个换行符”- 否定字符类:
[^abc] \D \W \S
- 乘法器:
{4} {3,16} {1,} ? * +
{3,16}
表示找到重复 3 到 16 个前一个正则字符?
表示“没有或一个”*
表示“没有或多个”+
表示“一个或多个”- 乘法器是贪婪的除非你在之后使用
?
, 即优先找到最长的
- 分支和组合:
(Septem|Octo|Novem|Decem)ber
- 管道符号
|
表示“或” - 圆括号表示组合 ,比如 在一周中找到一天,使用
(Mon|Tues|Wednes|Thurs|Fri|Satur|Sun)day
。
- 管道符号
- 词、行和文本边界:
\b
表示词边界^
表示行开始$
表示行结束^$
表示的就是空白行了
反向捕获组:
\1 \2 \3
等等。捕获组从左到右进行编号,只要计算左圆括号。(在替换表达式和匹配表达式中同时生效)比如有一段字符,我们需要前面的横杠去掉,尾巴的数字去掉, 英文句号换成中文顿号
-1.文章标题1
-2.文章标题2
-3.文章标题3
-4.文章标题4
-51.文章标题5
则可以使用正则表达式 -(\d{1,})\.(.*)\d
来匹配。然后使用 \1、\2
来替换。
- 向后引用: 在同样的表达式中引用同一个捕获组。
- 表达式
(xi)\1(ha)\2
能匹配xixihaha
- 表达式
- 元字符列表:
. \ [ ] { } ? * + | ( ) ^ $
- 字符类中使用到元字符列表:
[ ] \ - ^
- 你总是可以使用反斜杆对元字符进行转义:
\
参考资料:
RegExr:一款在线学习、构建和测试正则表达式的工具
TRY REGEX:交互式正则表达式的教学网站
55分钟学会正则表达式:很好的入门文章