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

正则表达式篇

一、正则表达式概述

正则表达式是一种强大的文本处理工具,可以精确地描述要匹配的字符组合,使文本处理更加高效。它广泛应用于文本编辑、数据处理、网络编程等领域。

二、正则表达式基本命令字符

2.1 匹配与通配

  • / :用于定界正则表达式,表示匹配模式的开始和结束。

  • . :匹配除换行符以外的任意单个字符。

    • 示例:/a.t/ 可以匹配 "art"、"act" 等,其中 "a" 和 "t" 分别是固定的字符,中间的任意字符由 . 匹配。

  • [] :匹配括号内的任意一个字符。

    • 示例:/[abc]/ 可以匹配 "a"、"b" 或 "c"。

    • 示例:/[0-9]/ 可以匹配任意一个数字字符。

2.2 范围与排除

  • - :在方括号 [] 中表示范围。

    • 示例:/[a-z]/ 可以匹配任意一个小写字母。

    • 示例:/[0-9a-f]/ 可以匹配十六进制数字(0-9 和 a-f)。

  • ^ :在方括号 [] 中表示取反,匹配不在括号内的任意一个字符;在方括号外表示匹配每一行的开头。

    • 示例:/[^0-9]/ 匹配非数字字符。

    • 示例:/^Hello/ 匹配以 "Hello" 开头的行。

2.3 字符类

  • \d :匹配数字字符(等价于 [0-9])。

  • \D :匹配非数字字符(等价于 [^0-9])。

  • \w :匹配字母、下划线或数字字符(等价于 [a-zA-Z0-9_])。

  • \W :匹配非字母、下划线或数字字符(等价于 [^a-zA-Z0-9_])。

  • \s :匹配空白字符(包括空格、Tab 等)。

  • \S :匹配非空白字符。

  • \b :匹配单词边界。

    • 示例:/\bword\b/ 可以精确匹配整个单词 "word",而不会匹配到类似 "wording" 中的 "word"。

  • \B :匹配非单词边界。

  • \. :匹配点号,因为点号在正则中有特殊意义,需用转义字符 \ 表示其本身。

2.4 重复与数量词

  • + :表示前面的字符重复一次或多次。

    • 示例:/a+/ 可以匹配 "a"、"aa"、"aaa" 等。

  • * :表示前面的字符重复零次或多次。

    • 示例:/a*/ 可以匹配空字符串、"a"、"aa" 等。

  • ? :表示前面的字符重复零次或一次。

    • 示例:/a?/ 可以匹配空字符串或 "a"。

  • {n} :表示匹配恰好 n 次重复。

    • 示例:/a{3}/ 匹配 "aaa"。

  • {m,n} :表示匹配至少 m 次但不超过 n 次重复。

    • 示例:/a{2,4}/ 可以匹配 "aa"、"aaa"、"aaaa"。

  • {n,} :表示匹配至少 n 次重复。

    • 示例:/a{2,}/ 可以匹配 "aa"、"aaa" 等。

2.5 特殊符号

  • $ :加在正则表达式后面表示匹配行尾。

    • 示例:/end$/ 匹配以 "end" 结尾的行。

2.6 分组与捕获

  • 分组 :用括号 () 将多个字符组合成一个整体来处理。

    • 示例:/(at)+/ 匹配 "at" 重复一次或多次,如 "at"、"atat" 等。

  • 捕获 :括号 () 也会捕获匹配的文本,可以通过 \1\2 等反向引用捕获的内容。

    • 示例:/(\d+)-(\d+)/ 可以匹配 "123-456",其中 \1 表示 "123",\2 表示 "456"。

2.7 选择

  • | :表示逻辑或,匹配左边或右边的表达式。

    • 示例:/abc|def/ 可以匹配 "abc" 或 "def"。

2.8 前瞻与后顾

  • 正向前瞻(?=...),匹配当前位置后面紧跟指定模式的位置。

    • 示例:/abc(?=def)/ 匹配 "abc",但前提是 "abc" 后面跟着 "def",如 "abcdef" 中的 "abc"。

  • 负向前瞻(?!...),匹配当前位置后面不紧跟指定模式的位置。

    • 示例:/abc(?!def)/ 匹配 "abc",但前提是 "abc" 后面不跟着 "def",如 "abcxyz" 中的 "abc"。

  • 正向后顾(?<=...),匹配当前位置前面紧跟指定模式的位置。

    • 示例:/(?<=abc)def/ 匹配 "def",但前提是 "def" 前面跟着 "abc",如 "abcdef" 中的 "def"。

  • 负向后顾(?<!...),匹配当前位置前面不紧跟指定模式的位置。

    • 示例:/(?<!abc)def/ 匹配 "def",但前提是 "def" 前面不跟着 "abc",如 "xyzdef" 中的 "def"。

三、正则表达式应用示例

3.1 匹配邮箱地址

/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/
  • 解释:^ 表示行首,[a-zA-Z0-9_.+-]+ 匹配邮箱用户名部分,@ 是固定字符,[a-zA-Z0-9-]+ 匹配域名部分,\. 匹配点号,最后的 [a-zA-Z0-9-.]+ 匹配顶级域名部分,$ 表示行尾。

3.2 匹配电话号码

/^(?:\d{3}-\d{3}-\d{4}|\(\d{3}\) \d{3}-\d{4})$/
  • 解释:^ 表示行首,(?:...) 表示非捕获分组,\d{3}-\d{3}-\d{4} 匹配三个数字加短横线的形式,\(\d{3}\) \d{3}-\d{4} 匹配带括号的形式,$ 表示行尾。

3.3 使用 grep 命令搜索文本

grep "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$" contacts.txt
  • 解释:在 contacts.txt 文件中搜索符合邮箱格式的行。

3.4 使用 sed 命令替换文本

echo "Hello, World!" | sed "s/World/Everyone/"
  • 解释:将 "World" 替换为 "Everyone",输出 "Hello, Everyone!"。

3.5 使用 awk 命令处理文本

echo "Name: John, Age: 30" | awk -F ": " '{print $2}'
  • 解释:使用 : 作为字段分隔符,打印第二个字段,输出 "John" 和 "30"。

http://www.xdnf.cn/news/584011.html

相关文章:

  • element ui 表格实现单选
  • v2.0 技术篇目录-研究生如何选择编程技术
  • iOS工厂模式
  • uniapp-商城-65-shop(1-品牌信息显示,将数据库信息同步到vuex的state)
  • 如何构建一个简单的AI Agent(极简指南)
  • 深度学习入门到实战:用PyTorch打通数学、张量与模型训练全链路​
  • 使用 A2A Python SDK 实现 CurrencyAgent
  • 开闭原则 (Open/Closed Principle, OCP)
  • leetcode hot100刷题日记——10.螺旋矩阵
  • day33 python深度学习入门
  • jmeter登录接口生成一批token并写入csv文件
  • 浪潮Inspur服务器产品线概述
  • 【paddle】常见的数学运算
  • Ubuntu 22.04上升级npm版本
  • 升级node@22后运行npm install报错 distutils not found
  • canvas(三)-动画3d
  • iisARR负均衡
  • 【IDEA问题】springboot本地启动应用报错:程序包不存在;找不到符号
  • 在react项目中使用andt日期组件,选择周和季度,直接获取所对应的日期区间
  • C++ HTTP框架推荐
  • 人脸识别备案开启安全防护模式!紧跟《办法》!
  • uni-app学习笔记九-vue3 v-for指令
  • redis Pub/Sub 简介 -16 (PUBLISH、SUBSCRIBE、PSUBSCRIBE)
  • 【C++20新特性】ranges::sort()使用方法,优势,注意点
  • 【1004. 最大连续1的个数 III】
  • ai之pdf解析工具 PPStructure 还是PaddleOCR
  • 火山引擎火山云带宽价格
  • 【工作流】Fastgpt配置豆包模型-火山引擎
  • Github 2025-05-22Go开源项目日报 Top10
  • 【COMPUTEX 2025观察】NVIDIA开放NVLink:一场重构AI算力版图的“阳谋“