【Linux】正则表达式的使用

news/2025/1/15 17:34:52/

正则表达式(Regular Expression,RE)

  正则表达式是通过一些特殊字符的排列,用以字串处理的表达式,正则表达式本身并不是一个工具程序,而实一个字串处理的标准依据,如果想要以正则表达式的方式处理字串,就需要使用支持正则表达式的工具程序,如vi,grep,sed,awk等

  正则表达式可以在文本中查找、替换、提取和验证特定的模式
以行为单位来进行字串的处理行为

基础正则表达式

  不同的语系将会影响到正则表达式的输出结果:由于不同语系的编码数据并不相同,所以就会造成数据选择结果的不同。

  • LANG = C时:0 1 2 3 4 … A B C D … Z a b c d … z
  • LANG = zh_TW时:0 1 2 3 4 … a A b B c C d D … z Z

  一般我们在练习正则表达式时,使用的是相容于POSIX的标准,因此使用c这个语系

1.特殊符号

特殊符号意义
[:alnum:]0-9, a-z, A-Z
[:alpha:]a-z, A-Z
[:blank:]空格键和Tab
[:cntrl:]键盘上的控制按键
[:digit:]0-9
[:graph:]除了空格键和Tab键的其他所有按键
[:lower:]a-z
[:upper:]A-Z
[:print:]任何可以被打印出来的字符
[:punct:]标点符号
[:space:]任何会产生空白的字符
[:xdigit:]代表16进制的数字类型,故包括0-9,a-f,A-F

2.普通字符

  普通字符包括没有显示指定为元字符的所有可打印和不可打印字符,这包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号

  • [string]匹配[...]中的所有字符
  • [^string]匹配除了[...]中字符的所有字符
  • [a-z]匹配一个区间
  • .匹配除换行符之外的任何单个字符,相等于[^\n\r]
  • \s\S匹配所有,\s是匹配所有空白符,包括换行,\S非空白符,不包括换行
  • \w匹配字母,数字,下划线,等价于[A-Za-z0-9_]
  • \d匹配任意一个阿拉伯数字,等价于[0-9]

3.特殊字符

  有特殊含义的字符,若要匹配这些特殊字符,必须首先使字符转义,即将反斜杠字符\放在他们前面

  • ()标记一个子表达式的开始和结束位置
  • .匹配除换行符之外的任何单字符
  • [标记一个中括号表达式的开始
  • \将下一个字符标记为特殊字符或原义字符,或向后引用,或八进制转义符
  • {标记限定符表达式的开始
  • |指明两项之间的一个选择

4.限定符

  限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配

  • {n}匹配确定的n次,其中n是一个非负整数
  • {n,}至少匹配n次
  • {n,m}最少匹配n次且最多匹配m次
  • *匹配前面的子表达式零次或多次,等价于{0,}
  • +匹配前面的子表达式一次或多次,等价于{1,}
  • ?匹配前面的子表达式零次或一次,等价于{0,1}

*+限定符都是贪婪的,因为他们会尽可能多地匹配文字,只有在他们后面加上一个?就可以实现非贪婪或最小匹配

5.定位符

  能够将正则表达式固定到行首或行尾

  • ^匹配输入字符串的开始位置
  • $匹配输入字符串的结尾位置
  • \b匹配一个单词边界,即字与空格间的位置
  • \B非单词边界匹配

不能将限定符与定位符一起使用,

6.选择

  用圆括号()将所有选择项括起来,相邻的选择项之间用|分隔,但使用圆括号会有一个副作用,使相关的匹配会被缓存,可以使用非捕获元来消除这种副作用

7.非打印字符

  • /cx匹配由x指明的控制字符,其中x的值为a-z或A-Z
  • \f匹配一个换页符
  • \n匹配一个换行符
  • \r匹配一个回车符
  • \s匹配任何空白字符
  • \S匹配任何非空白字符
  • \t匹配一个制表符
  • \v匹配一个垂直制表符

例子(动态更新)

  • 1.匹配一个正整数:[1-9][0-9]*
  • 2.匹配1~99的两位数:[1-9][0-9]?

http://www.ppmy.cn/news/1563075.html

相关文章

【计算机网络】什么是网关(Gateway)?

网上冲浪多了,你可以听到过网关(Gateway)这个词,但是却不太清楚网关(Gateway)到底是干什么的、负责网络当中的什么任务,本篇文字将会为你介绍网关(Gateway)的作用&#x…

银河麒麟桌面操作系统搭建FTP服务器

一、操作环境 服务端:银河麒麟桌面操作系统V10 客户端:银河麒麟桌面操作系统V10 二、服务器配置 说明:以下命令均在终端执行。鼠标点击桌面右键,在终端中打开。 操作步骤: (一)安装vsftpd…

[Git] 如何理解及基础操作

什么是 Git Git 是一种版本控制器,能够帮助你记录文件的历史和变化过程,并支持多人协同作业。过去,人们通常会通过复制文件的方式来保存版本: “报告-v1”“报告-v2”“报告-最终版”“报告-突破版” 这样的方式带来了突出的问…

利用Java爬虫获取淘宝商品描述item_get_descAPI接口

一、引言 在电子商务领域,商品描述是消费者了解商品详情的重要信息来源,对于商家的销售和消费者的购买决策都具有关键影响。淘宝作为国内领先的电商平台,其商品描述数据具有极高的价值。虽然淘宝开放平台提供了API接口,但这些接口…

【AJAX详解】

AJAX详解 AJAX(Asynchronous JavaScript and XML)是一种创建交互式网页应用的网页开发技术。它允许在不重新加载整个页面的情况下,通过后台与服务器交换数据并更新部分网页内容。这提供了更流畅的用户体验,因为用户不需要等待整个…

springmvc前端传参,后端接收

RequestMapping注解 Target({ElementType.METHOD, ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Documented Mapping public interface RequestMapping {String name() default "";AliasFor("path")String[] value() default {};AliasFor(&quo…

Java Web开发进阶——WebSocket与实时通信

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,广泛应用于需要实时数据交换的应用程序中。它能够实现服务器与客户端之间的双向通信,避免了传统 HTTP 请求/响应的延迟。结合 Spring Boot,开发实时通信应用变得更加高效与简便。 1. …

【IPy模块01】Python运维模块之IP 地址、网段的基本处理

实用的IP地址处理模块IPy IP地址规划是网络设计中非常重要的一个环节,规划的好坏会直接影响路由协议算法的效率,包括网络性能、可扩展性等方面,在这个过程当中,免不了要计算大量的IP地址,包括网段、网络掩码、广播地址…