正则表达式说到用时方恨少,所以近期会以书中内容加自己理解记一些笔记
正则表达式目标:匹配符合要求的文本,忽略不符合要求的文本
元字符:
| . | 点号 | 匹配单个任意字符 |
| [] | 字符组 | 匹配单个列出的字符 |
| [^] | 排除型字符组 | 匹配单个未列出的字符 |
| \ | 转义字符 | 将元字符转义为普通字符 |
| ? | 问号 | 至多匹配一次 |
| * | 星号 | 可以匹配任意多次,也可以不匹配 |
| + | 加号 | 至少匹配一次,也可以匹配任意多次 |
| {min,max} | 区间量词 | 至少匹配min次,至多匹配max次 |
| ^ | 脱字符 | 匹配一行开头位置 |
| $ | 美元符 | 匹配一行结束位置 |
| /< | 单词分界符 | 匹配单词的开始位置 |
| /> | 单词分界符 | 匹配单词的结束位置 |
| | | alternation | 匹配任意分隔的表达式 |
| () | 括号 | 限定多选结构范围,捕获文本 |
| \1…… | 反向引用 | 匹配之前第1第二……括号内表达式匹配的文本 |
行的起使和结束
解读:匹配一些行首行尾固定内容的字符,例如去除行首行尾某些字符
- ^代表一行的开始,$代表一行的结束
实例:
^cat 表示只匹配cat开头的行
^cat$表示只匹配包含cat的行
字符组
字符组及字符组连字符
解读:单个字符的或功能,当你不确定会出现哪个字符的时候可以用字符组匹配下,注意,是字符,字符组用()
- []表示一个字符组,内容可以为某些字符,字符间表示或的关系
- -表示一个字符组连字符,字符组连字符可以表示一个范围,可以为中文,英文,数字
实例:
l[oi]ve可以匹配love或live
<H[1-6]>可以匹配标签<H1>-<H6>
注意:字符组连字符只可以在字符组内部使用,字符组外部只表示一个符号,在字符组开头使用也表示一个符号
思考:结合上节内容,可以匹配到网页某个标签中特定的字符,标签内字符串又如何匹配呢
排除型字符组
解读:这个也是很有用滴,当你不想某个字符串中出现符号的时候,可以用排除型字符进行排除
- [^]表示排除型字符组,^很眼熟啊,没错在字符组外面,代表行的开始,在字符组内部,代表匹配一个排除型字符组中所有字符以外的字符
实例:
q[^u]匹配排除u以外的字符
匹配任意字符
解读:当你不知道某些位置会出现什么字符时,可以用点号匹配任意字符
- .表示匹配任意字符,匹配啥都行,但在字符组内还是表示.并不是元字符
实例:
A.表示匹配一个A和一个任意字符
匹配任意子表达式
解读:匹配任意子表达式与字符组相似,两者差别为匹配任意子表达式可以表示多个字符的或关系,而字符组只表示单个字符
- |表示匹配任意子表达式,可以匹配多个字符的或关系
实例:
love|live表示匹配其中任意一个单词,可以简化为l(o|i)ve
忽略大小写
解读:有时不知道匹配的单词字母是否大小写时可以使用忽略大小写更简便
- -i表示忽略大小写的匹配,-i要写在正则表达式之前
实例:
-i^zz$表示匹配一个zz忽略大小写的行
单词分界符
解读:当希望匹配的单词包含另一个单词中时,可以使用单词分界符
- \<表示单词起使位置,\>表示单词结束位置
实例:
\<cat\>表示匹配cat这个单词
可选项元素
解读:当你不知道一个字符是否会出现时,可以用可选项元素匹配一下,多用于匹配单词字符串
- ?表示可选项元素,表示此处容许出现这个字符,这个字符可有可无
实例:
colou?r匹配colour或color
量词
解读:当你不知道需要匹配字符串的长度时,可以使用量词
- *表示匹配任意多次
- +表示匹配任意多次,但至少匹配一次
- ?表示可能出现,但不大于一次
实例:
H[1-6] *匹配H1-H6
括号&反向作用
解读:括号可以将一段表达式当作一个整体,反向作用可以将这个整体临时储存
- ()表示将若干个字符组合为一个单元,\1可以记住第一个括号内匹配的文本\n可以记住第n个括号中匹配的文本
实例:
<([A-Za-z]+) +\1>表示匹配一个以上大小写字母,并将这些字母后匹配一个空格后再次多次匹配,最后再次匹配括号中的字母
转义字符
解读:当你想将元字符作为普通字符使用时,可以用转义后使用
- \代表一个转义字符,后匹配任意元字符,
实例:
\[\]匹配一个方括号
