当前位置: 首页 > news >正文

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

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

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

(1)限定字符

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

常用限定字符:

语法说明

?

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

(2)元字符

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

常用元字符:

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

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

echo "AAA" | grep -E 'AAA|BBB'
AAAecho "BBB" | grep -E 'AAA|BBB'
BBB'AAA|BBB'表示匹配字符串'AAA'或者是字符串'BBB'echo "CCC" | grep -E 'AAA|BBB'

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

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

echo "AAA" | grep -E 'AAA|BBB|CCC'
AAAgrep -Eh '^(bz|gz|zip)' test.txt

附:

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

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

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

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

http://www.lryc.cn/news/99364.html

相关文章:

  • 【vue】vue面试高频问题之-$nextTick的作用和使用场景
  • MySQL学习笔记之SQL语句执行过程查看
  • 如何以毫秒精度,查看系统时间以及文件的创建时间
  • 基于机器学习的情绪识别算法matlab仿真,对比SVM,LDA以及决策树
  • jMeter使用随记
  • [语义分割] DeepLab v3(Cascaded model、ASPP model、两种ASPP对比、Multi-grid、训练细节)
  • css - Media Query
  • 9.python设计模式【外观模式】
  • Webpack5 CopyPlugin的作用
  • kafka服务端允许生产者发送最大消息体大小
  • 台阶型Nim游戏博弈论
  • NestJS 的 中间件 学习
  • 搭建自己第一个golang程序
  • Mysql加锁过程
  • 财经界杂志财经界杂志社财经界编辑部2023年第19期目录
  • Linux常用命令——dpkg-split命令
  • 常见的二十种软件测试方法详解
  • Python(一)
  • git pull无效,显示 * branch master -> FETCH_HEADAlready up to date. pull无效解决方法
  • SK5代理与socks5代理
  • 【【51单片机红外遥控小风车】】
  • 如何连接远程服务器?快解析内内网穿透可以吗?
  • 【云边有个小卖部】上新《探秘Linux》第三章 Linux 软件包管理器 yum
  • 【深度学习】【Image Inpainting】Free-Form Image Inpainting with Gated Convolution
  • 游戏引擎UE如何革新影视行业?创意云全面支持UE云渲染
  • DB-GPT:强强联合Langchain-Vicuna的应用实战开源项目,彻底改变与数据库的交互方式
  • STM32CubeMX v6.9.0 BUG:FLASH_LATENCY设置错误导致初始化失败
  • K8s-资源管理(二)
  • 脉冲信号测试应如何选择示波器带宽?
  • OpenCV DNN模块推理YOLOv5 ONNX模型方法