安全基础 --- 正则表达式

正则表达式是表达文本模式的方法

正则表达式(Regular Expression),简称为正则Regex,是一个用来描述、匹配和操作字符串的工具。

(1)限定字符

限定字符多用于重复匹配次数

常用限定字符:

|-------------|-------------------|
| 语法 | 说明 |
| ? | 上一项是可选的,最多匹配一次。 |
| * | 前一项将被匹配零次或多次。 |
| + | 前一项将被匹配一次或多次。 |
| {N} | 上一项完全匹配N次。 |
| {N,} | 前一项匹配N次或多次。 |
| {N,M} | 前一项至少匹配N次,但不超过M次。 |

(2)元字符

**元字符**是表示特殊函数的字符,包括以下这些^ $ . [ ] { } - ? * + ( ) | \\

常用元字符:

|---------|-------------------------|
| 语法 | 说明 |
| . | 匹配任何单个字符。 |
| ^ | 匹配行首的空字符串;也代表不在列表范围内的字符 |
| $ | 匹配文本行结尾 |
| \b | 匹配单词的开始或结束(单词边缘的空字符串) |
| \w | 匹配字母或数字或下划线或汉字 |
| \s | 匹配任意空白符 |
| \d | 匹配一个数字字符。等价于[0-9]。 |

css 复制代码
grep -h '.zip' test.txt
在文件中查找包含正则表达式".zip"的文本行

grep -h '^zip' test.txt
grep -h 'zip$' test.txt
分别在文件中搜索行首和行尾包含"zip"的文本行

(3)反义字符

|---------|----------------|
| 语法 | 说明 |
| \B | 匹配不是单词开头或结束的位置 |
| \D | 匹配一个非数字字符。 |
| \S | 匹配任何可见字符。 |
| \W | 匹配任何非单词字符。 |

(4)字符类

方括号之中的字符,表示可以任意匹配其中的一个。

|-----------------|-----------------------|
| 语法 | 说明 |
| [^x] | 匹配除了x以外的任意字符 |
| [^aeiou] | 匹配除了aeiou这几个字母以外的任意字符 |

css 复制代码
grep -h '[bg]zip' test.txt
匹配包含字符串"bzip"或者"gzip"的任意行

grep -h '[^bg]zip' test.txt
匹配不以'b'或'g'开头的行

-在方括号中表示一个字符区域
grep -h '^[A-Z]' test.txt
匹配以大写字母开头的行

grep -h '[-AZ]' test.txt
匹配以连字符,或大写A,或大写Z开头的行

(5)预定义字符类

  • [:alnum:] 字母数字字符。在 ASCII 中,等价于:[A-Za-z0-9]

  • [:word:][:alnum:]相同, 但增加了下划线字符。

  • [:alpha:] 字母字符。在 ASCII 中,等价于[A-Za-z]

  • [:blank:] 包含空格和 tab 字符。

  • [:cntrl:] ASCII 的控制码。包含了0到31,和127的 ASCII 字符。

  • **[:digit:]**数字0到9

  • [:graph:] 可视字符。在 ASCII 中,它包含33到126的字符。

  • [:lower:] 小写字母。

  • [:punct:] 标点符号字符。

  • [:print:] 可打印的字符。等于[:graph:]中的所有字符,再加上空格字符。

  • [:space:] 空白字符,包括空格,tab,回车,换行,vertical tab, 和 form feed.在 ASCII 中, 等价于[\t\r\n\v\f]

  • [:upper:] 大写字母。

  • [:xdigit:] 用来表示十六进制数字的字符。在 ASCII 中,等价于[0-9A-Fa-f]

(6)选择

**|**表示匹配一系列字符串之中的一个。

css 复制代码
echo "AAA" | grep -E 'AAA|BBB'
AAA

echo "BBB" | grep -E 'AAA|BBB'
BBB

'AAA|BBB'表示匹配字符串'AAA'或者是字符串'BBB'

echo "CCC" | grep -E 'AAA|BBB'

grep程序使用-E参数,表示按照正则表达式规则匹配。并且,这个正则表达式放在单引号之中,为的是阻止Shell把|解释为管道操作符。

**|**可以多个连用,也可以与其他正则规则结合使用。

css 复制代码
echo "AAA" | grep -E 'AAA|BBB|CCC'
AAA

grep -Eh '^(bz|gz|zip)' test.txt

附:

  • --:表示范围,如果它不是列表中的第一个或最后一个,也不是列表中某个范围的终点。

  • \<:匹配单词开头的空字符串。

  • \>:匹配单词末尾的空字符串。

|---------|------------|
| \f | 匹配一个换页符。 |
| \n | 匹配一个换行符。 |
| \r | 匹配一个回车符。 |
| \t | 匹配一个制表符。 |
| \v | 匹配一个垂直制表符。 |

相关推荐
Hare_bai10 分钟前
WPF的MVVM模式核心架构与实现细节
ui·架构·c#·wpf·交互·xaml·mvvm
北极光SD-WAN组网1 小时前
5G智慧网络如何实现异地组网?基于智能组网模块的解决方案解析
网络·5g
刘孬孬沉迷学习1 小时前
5G网络gNB与核心网(5GC)连接架构及传输协议
网络·网络协议·tcp/ip·5g·架构·udp·信息与通信
Xiaok10181 小时前
libpcap 抓包:从打开网卡到解析数据包
服务器·网络·php
不像程序员的程序媛1 小时前
Linux本机ping虚机ip Network unreachable
linux·运维·tcp/ip
wanhengidc1 小时前
服务器硬盘的作用都有哪些?
运维·服务器·安全·智能手机·云计算
爱奥尼欧1 小时前
【Linux笔记】网络部分——传输层协议TCP(1)
linux·运维·网络·笔记·tcp/ip·1024程序员节
lang201509281 小时前
WebSocket子协议STOMP
网络·websocket·网络协议
饺子大魔王的男人2 小时前
3秒传输GB级文件:FastSend让P2P共享告别云存储依赖
网络·网络协议·p2p
在坚持一下我可没意见2 小时前
Java 网络编程:TCP 与 UDP 的「通信江湖」(基于TCP回显服务器)
java·服务器·开发语言·笔记·tcp/ip·udp·java-ee