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

一 基本正则

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

相关推荐
m0_64880493_江哥13 小时前
用正则方法从中英文本提取英文的python示例
python·mysql·正则表达式
九皇叔叔14 小时前
Linux Shell 正则表达式:从入门到实战,玩转文本匹配与处理
linux·mysql·正则表达式
一百天成为python专家2 天前
python爬虫入门(小白五分钟从入门到精通)
开发语言·爬虫·python·opencv·yolo·计算机视觉·正则表达式
蓝桉~MLGT2 天前
Python学习历程——字符串相关操作及正则表达式
python·学习·正则表达式
一晌小贪欢2 天前
Python爬虫第5课:正则表达式与数据清洗技术
爬虫·python·正则表达式·网络爬虫·python爬虫·python3·网页爬虫
MANONGMN3 天前
Linux 通配符与正则表达式(含实战案例+避坑指南)
linux·运维·正则表达式
带土13 天前
18 .shell编程-正则表达式
linux·正则表达式
2025年一定要上岸4 天前
【日常学习】10-15 学习re
学习·算法·正则表达式
Penguin_zlh7 天前
基础 - 正则表达式
正则表达式
超级大只老咪8 天前
正则表达式
正则表达式