详解正则表达式(基本+扩展)

一 基本正则

1.字符匹配

.#匹配任意单个字符(除了\n),可以是一个汉字或其它国家的文字

\] #匹配指定范围内的任意单个字符,示例:\[wang\] \[0-9\] \[a-z\] \[a-zA-Z

\^ #匹配指定范围外的任意单个字符,示例:\^wang :alnum: #字母和数字

:alpha: #代表任何英文大小写字符,亦即 A-Z, a-z

:lower:\] #小写字母,示例:\[\[:lower:\]\],相当于\[a-z

:upper: #大写字母 :blank: #空白字符(空格和制表符)

:space: #包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白,比:blank:包 含的范围广

:cntrl: #不可打印的控制字符(退格、删除、警铃...)

:digit: #十进制数字

:xdigit: #十六进制数字

:graph: #可打印的非空白字符

:print: #可打印字符

:punct: #标点符号

\s #匹配任何空白字符,包括空格、制表符、换页符等等。等价于 \\f\\r\\t\\v, Unicode正则表达式会匹配全角空格符

\S #匹配任何非空白字符。等价于 \^\\f\\r\\t\\v

\w #匹配一个字母,数字,下划线,汉字,其它国家文字的字符,等价于_\[:alnum:字]

\W #匹配一个非字母,数字,下划线,汉字,其它国家文字的字符,等价于\^_\[:alnum:字]

echo "ab1c2d3e4444fABCg$%^" | grep "0-Z"

ab1c2d3e4444fABCg$%^

2 匹配次数

* #匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配

.* #任意长度的任意字符

\? #匹配其前面的字符出现0次或1次,即:可有可无

\+ #匹配其前面的字符出现最少1次,即:肯定有且 >=1 次

\{n\} #匹配前面的字符n次

\{m,n\} #匹配前面的字符至少m次,至多n次

\{,n\} #匹配前面的字符至多n次,<=n

\{n,\} #匹配前面的字符至少n次

例:

echo "roooooooot" | grep "ro*t"

roooooooot

echo "rt" | grep "ro*t"

rt

0次或1次

root@zz:~# echo /etc/ |grep "/etc/\?"

/etc/

1次或多次

root@zz:~# echo google | grep "go\+gle"

google

root@zz:~# echo gooogle | grep "go\+gle"

gooogle

匹配正负数

root@zz:~# echo -1 -2 123 -123 234 |grep -E '\-?0-9+'

-1 -2 123 -123 234

3 位置锚定

^#行首锚定, 用于模式的最左侧

$ #行尾锚定,用于模式的最右侧

^PATTERN$ #用于模式匹配整行

^$ #空行

^\[:space:]*$ #空白行

\< 或 \b #词首锚定,用于单词模式的左侧

\> 或 \b #词尾锚定,用于单词模式的右侧

\ <PATTERN\> #匹配整个单词 #注意: 单词是由字母,数字,下划线组成

grep -v '^$\|^#' /etc/profile #排除所有空行及注释行(以#为注释)

grep "^\^#" /etc/profile #所有非注释行

二、扩展正则

1.字符匹配

. #任意单个字符 wang

#指定范围的字符 \^wang

#不在指定范围的字符

:alnum: #字母和数字

:alpha: #代表任何英文大小写字符,亦即 A-Z, a-z

:lower:\] #小写字母,示例:\[\[:lower:\]\],相当于\[a-z

:upper: #大写字母

:blank: #空白字符(空格和制表符)

:space: #水平和垂直的空白字符(比:blank:包含的范围广)

:cntrl: #不可打印的控制字符(退格、删除、警铃...)

:digit: #十进制数字

:xdigit: #十六进制数字

:graph: #可打印的非空白字符

:print: #可打印字符

:punct: #标点符号

2 匹配次数

* #匹配前面字符任意次

? #0或1次

  • #1次或多次

{n} #匹配n次

{m,n} #至少m,至多n次

.3 位置锚定

^

#行首

$ #行尾

\<, \b #词首

\>, \b #词尾

4 分组其它

() 分组 #后向引用:\1, \2, ... 注意: \0 表示正则表达式匹配的所有字符

| #或者

a|b #a或b

C|cat #C或cat

(C|c)at #Cat或cat

相关推荐
互联网中的一颗神经元1 天前
小白python入门 - 23. Python 正则表达式的应用
python·正则表达式
2501_936415692 天前
API-正则表达式&时间&包装类
正则表达式
鹤卿1235 天前
谓词与正则表达式(OC)
ios·正则表达式·objective-c·xcode
饼干哥哥8 天前
10.5% 深层转化、90%+ 新用户,ChatGPT Ads 值得吗?
算法·正则表达式·编程语言
饼干哥哥9 天前
Seedance TK视频「真人感」问题的 9 个解法
正则表达式·代码规范·设计
逝水无殇10 天前
C# 正则表达式详解
开发语言·后端·正则表达式·c#
木木子2215 天前
# 密码强度检测深度解析:正则表达式实时分析、多维度评分算法与可视化反馈
mysql·算法·华为·正则表达式·harmonyos
饼干哥哥15 天前
用Claude Code跑通跨境电商的5大场景,顶10个人的团队
人工智能·设计模式·正则表达式
饼干哥哥16 天前
单篇100万阅读文章,如何用AI 做好内容创作?
人工智能·正则表达式·代码规范
无足鸟ICT17 天前
【RHCA+】扩展正则表达式
linux·正则表达式