()##正则表达式
相信看到这个题目的时候,你已经对正则表达式已经学习了不下十遍了,题目可能有点夸张,但是正则确实也是很难学懂的一门工具语言,其实它也只是为了让机器读懂而已,每次学习完之后总是忘记了,很久没用看到之后总是一脸懵逼,然后重新查询手册,现在,把我重新学习正则表达式的过程记录一下,希望能够更好地运用这门工具语言。
用途
1.之前写爬虫的时候也是经常用于网页文本的匹配,处理文本
2.过滤敏感字符
3.处理字符串
开始学习
网上突然发现有人写了《learn regex the easy way 》,看完之后感觉涨姿势了,现整理如下,如果你有兴趣阅读,请看这里,同时配合练习网站食用,效果最佳。
相信各位老司机应该看了很多遍正则的文档了吧,基础部分就直接省略。
1.元字符
正则表达式主要依赖元字符,元字符不代表他们本身的字面意思, 他们都有特殊的含义.
元字符我觉得大体可以分为三类
1. 表示特殊含义的字符
元字符 | 描述 |
---|---|
. | 句号匹配任意单个字符除了换行符. |
[ ] | 字符种类. 匹配方括号内的任意字符. |
[^ ] | 否定的字符种类. 匹配除了方括号里的任意字符 |
(xyz) | 字符集, 匹配与 xyz 完全相等的字符串. |
\ | 转义字符,用于匹配一些保留的字符 [ ] ( ) { } . * + ? ^ $ \ |
\w | 匹配所有字母数字, 等同于 [a-zA-Z0-9_] |
\W | 匹配所有非字母数字, 即符号, 等同于: [^\w] |
\d | 匹配数字: [0-9] |
\D | 匹配非数字: [^\d] |
\s | 匹配所有空格字符, 等同于: [\t\n\f\r\p{Z}] |
\S | 匹配所有非空格字符: [^\s] |
\f | 匹配一个换页符 |
\n | 匹配一个换行符 |
\r | 匹配一个回车符 |
\t | 匹配一个制表符 |
\v | 匹配一个垂直制表符 |
2. 表示重复次数的字符
元字符 | 描述 |
---|---|
* | 匹配>=0个重复的在*号之前的字符. |
+ | 标记?之前的字符为可选.0或1次 |
? | 否定的字符种类. 匹配除了方括号里的任意字符 |
{n,m} | 匹配num个中括号之前的字符 (n <= num <= m). |
3. 锚点
元字符 | 描述 |
---|---|
^ | 用来检查匹配的字符串是否在所匹配字符串的开头. |
$ | $ 号用来匹配字符是否是最后一个. |
2.匹配规则
1. 后向引用
用于重复搜索前面某个分组匹配的文本。
比如:
\b(\w+)\b\s+\1\b,可以匹配重复的单词如,go go其中\b表示匹配单词的开始或者结束,也就是单词开始处和结束处之间的多于一个的字母或数字(\b(\w+)\b),这个单词会被捕获到编号为1的分组中,然后是1个或几个空白符(\s+),最后是分组1中捕获的内容(也就是前面匹配的那个单词)(\1)。自己指定子表达式的组名: (?< Word >\w+) ,使用自定义分组的时候,使用以下语法 \k < Word>上面例子可以改写为\b(?< Word>\w+)\b\s+\k< Word>\b
2. 零断宽言
第一次听到这个专业术语的时候,一脸懵逼,都不太想看是什么东西了,主要是太晦涩难懂了,查阅其他资料之后,我们可以把它叫做前后关联约束(前后预查)
- 前置约束
(?=exp),匹配exp正则表达式前面的位置
(?!exp),匹配后面跟的不是exp的位置 - 后置约束
(?<=exp),匹配exp后面的位置
(?< !exp),匹配前面不是exp的位置
3. 贪婪与懒惰匹配
上述的重复次数都为贪婪匹配,即通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符,有时为了性能需求,需要匹配尽可能少的字符,很简单的做法就是前面给出的限定符都可以被转化为懒惰匹配模式,只要在它后面加上一个问号?
以上,具体以官方手册为准!