//
Regular Expression(Regex)
Search
Try Notion
Regular Expression(Regex)
一.简介
应用
编程中的词法分析器
爬虫中应用
填写表单时候的检测
🤔速记
铆定位置[匹配串]{限定符形式}
二.语法
匹配串内部语法
元字符
基本上同字符类一一对应,但是也有几个特殊的
\s 为空白字符 \S为非空白字符
\d 为数字字符 \D为非数字
\w 为单词字符 \D为单词数字
. 表示任意字符
^表示行首
$表示行尾
若要匹配非单个字符使用(ab) 此时视ab为一个整体
(cat|dog)匹配cat 或者 dog
[abc] 字符类[abc] 只能匹配abc
预定义的字符类和对应的等效元字符(meta)
[:alnum:] 字母和数字
[:alpha:] \a 字母
[:lower:] \l 小写字母
[:upper:] \u 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] \s 所有空格符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
[:digit:] \d 十进制数字
[:xdigit:] \x 十六进制数字
[:graph:] 可打印的非空白字符
[:print:] \p 可打印字符
[:punct:] 标点符号
限定符
前面的字符出现的规则
? 前面字符出现0或1次(可有可无)
* 前面字符出现0或多次
+ 匹配出现1次以上
{6} 匹配出现6次
{2,6} 匹配2到6次
{2,} 匹配2次以上
位置锚定
^ :锚定行首
$ :锚定行尾。技巧:"^$"用于匹配空白行。
\b或\<:锚定单词的词首。如"\blike"不会匹配alike,但是会匹配liker
\b或\>:锚定单词的词尾。如"\blike\b"不会匹配alike和liker,只会匹配like
\B :与\b作用相反。
分组引用
前面 (cat|dog)匹配cat 或者 dog 这个语法 不单单适用于简单的or语句,更重要的是分组
分组的实现使得引用匹配成为可能
\1 \2 ... \n 引用匹配到的第n个括号的字串
💻([:alpha:]).*\1 解析
([[:alpha:]]).*\1 result abcda √(matched) abccd × 仅接受首位相同的字母
Copy
Bash
贪婪和懒惰匹配
当一个表达式有多种完成结果的时候,默认会选择字符数最大的一种
比如<span><b>Hello </b></span>
如果采用<.+>去匹配 从头匹配到尾.+会匹配尽可能多的字符
<.+?>后面加一个问好变成榄段匹配
三.egrep与grep
grep参数介绍
匹配选项
-E expend: 开启扩展模式(等价egrep)
-i ignore case: 忽略大小写
-v invert: 反选匹配
输出选项
-o 输出有被匹配的字符串
-c 输出匹配了多少行
连坐机制
-A n after: 显示匹配到的字符串所在的行及其后n行
-B n before: 显示匹配到的字符串所在的行及其前n行
-C n context: 显示匹配到的字符串所在的行及其前后n行
表达式部分可用语法
匹配串语法
. :任意一个字符。
[abc] :表示匹配一个字符,这个字符必须是abc中的一个。
[a-zA-Z] :表示匹配一个字符,这个字符必须是a-z或A-Z这52个字母中的一个。
[^123] :匹配一个字符,这个字符是除了1、2、3以外的所有字符。
对于一些常用的字符集,系统做了定义:
[A-Za-z] 等价于 [[:alpha:]]
[0-9] 等价于 [[:digit:]]
[A-Za-z0-9] 等价于 [[:alnum:]]
tab,space 等空白字符 [[:space:]]
[A-Z] 等价于 [[:upper:]]
[a-z] 等价于 [[:lower:]]
标点符号 [[:punct:]]
限定符
\{m,n\} :匹配其前面出现的字符至少m次,至多n次。
\? :匹配其前面出现的内容0次或1次,等价于\{0,1\}。
* :匹配其前面出现的内容任意次,等价于\{0,\},所以 ".*" 表述任意字符任意次,即无论什么内容全部匹配。
位置锚定
^ :锚定行首
$ :锚定行尾。技巧:"^$"用于匹配空白行。
\b或\<:锚定单词的词首。如"\blike"不会匹配alike,但是会匹配liker
\b或\>:锚定单词的词尾。如"\blike\b"不会匹配alike和liker,只会匹配like
\B :与\b作用相反。
🤔和我所学的区别
匹配串中: (dog|cat) [abc] 也需要转义符
除了* ,多数限定符需要转义符