目录
- Egrep元字符
- 常用的正则表达式
在学习爬虫的时候就想认真的好好研究一下正则表达式,当时只是想快点爬到自己想要的东西,真的欲速则不达,自己似乎没有成功过。 回来看看自己现在好好学习正则表达式,什么是自己解决不了的呢?
Egrep元字符
行的起始和结束,在这里 ’^’ 表示行的开始,而 “$”表示行的结束。
1
2
^cat -->表示匹配以cat开头的行
cat$ -->表示匹配以cat结尾的行
字符组
元字符: []
匹配若干个字符之一,使用“[]”,表示匹配中括号中的任意一个字符就是满足的。表达的意思是或。
| 字符组的意思是在同一个位置能够匹配若干个字符。一个字符就是满足的,这个和下面的 ‘ | ’ 存在很大的区别 |
元字符: -
在字符组中使用 “-”表示什么范围,a-d 表示 “a,b,c,d” ,1-4表示1,2,3,4。 只用在字符组内部“-”才是元字符而且不是第一个字符。
1
2
[abcd]at -->aat\bat\cat\dat 这些都是满足匹配规则的。
[a-d]at -->和上面表达的意思一致,
元字符: ^
在字符组的开头添加”^”起着排除的作用,只有在字符组的开头。一个字符组即使是一个排他性的字符组至少也需要匹配一个字符。
元字符: .
元字符”.”匹配任意字符的字符组的简便写法。
1
'03.19.76' or 03[-./]19[-./]76
上面那两种写法都可以匹配到 03.19.76,03-19-76,03/19/76 。但是后面哪一种更加的精确,前面哪一种由于点的存在会匹配到除了三个意外其它的。
’-‘在字符组的开头不是元字符,’.’在字符组中不是元字符
元字符: |
| 元字符’ | ‘的意思也是或,但是它“或”的是总表达式,这个总表达式又能匹配任意的子表达式。在这里子表达式被称为“多选分支”,所以使用” | “的“或”是多选结构。 |
| 在字符组中,’ | ‘表达的是字符而不是元字符。多选结构可以包括很多字符。但是不能超过小括号的界限。一般一个多选结构都是使用’()’进行括起来的。 |
1
(Fir|1)st [Ss]atr
上面就是多选结构匹配First或者1st都是正确的。
| 所以看出’[]’和’ | ‘的区别在于:一个字符组只能匹配目标文本中的单个字符,而每个多选结构自身都可能是完整的正则表达式,都可以匹配任意长度的文本。 |
忽略大小写
在egrep中可以使用 -i 来进行忽略大小写的匹配,不用自己写[Ss]这样的字符组。如下:
1
Egrep -i '^(From|Subject|Data): ' -->FROM:
单词分界符: \> \<
1
2
3
\<cat\> -->匹配cat这个单词
\<cat -->匹配以cat为开头的单词
cat\> -->匹配以cat结尾的单词
字符’<’和’>’本身并不是元字符只有他们和斜线连起来的时候整个序列才有意义,所以我们称之为元字符序列。
总结
- ’.’ 单个任意字符
- ‘[…]’ 列出的任意字符
- [^…] 未列出的任意字符
- ^ 行的起始位置
- $ 行的结束位置
- < 单词的起始位置
- > 单词的结束位置
-
匹配分隔符两边的任意一个表达式 - (…) 限制竖线的作用范围
attention
- 在字符组内一个意思,外可能又是另一个意思,在不同的位置又可能表达其它意思,所以要记清楚字符在什么时候表达元字符的意思。
- 不要混淆字符组和多选项,它们最大的区别在于,前者只能匹配一个字符,后者匹配任意个。
可选项元素
可选项: ?
问号的元字符作用于之前紧邻的元素,表达的意思是此处容许出现这个元素,但不是匹配成功的必要条件。 简单点说就是这里出现和不出现这个元素匹配都是成功的。 一般使用括号来界定’?’元字符作用的对象。
1
(th)?4 -->th4 和 4 都是正确的
其它量词:重复出现
星号 : ‘*’ 代表可以重复出现0次或者多次 加号 :’+’ 代表1次或者多次 问号 : ‘?’ 代表可以出现0次或者一次 区间:{数字,数字} 代表可以出现的次数在这两个数之间
它们都是量词,作用于它们之前的一个元素,这个元素最好使用括号括起来便于理解。约束前一个元素出现的次数。
括号及反向引用
括号能够记住他们包含子表达式匹配的文本,然后通过使用 \1 or \2 … 来得到括号记住的文本
1
(0-9)(a-z)\1\2 --> \1 等于(0-9)匹配的内容,\2 等于(a-z)匹配的内容 可以匹配:1a1a
神奇的转义
可以使用’'来对元字符进行转义让其成为一个普通的字符,但在字符组中不行,在字符组中’'就是一个普通的字符。
1
\. -->这样来匹配点
attention:斜线和大于小于以及数字会组成元字符序列
常用的正则表达式
1
2
3
4
5
6
变量名
[a-zA-Z_][a-zA-Z0-9]*
引号内的字符串
"[^"]*"
美元金额
\$[0-9]+(\.[0-9]+)?