当前位置: 首页 > 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"。

相关文章:

  • std::initialzer_list 与花括号{}数据列表
  • 游戏引擎学习第304天:构建与遍历图
  • 【ffmpeg】编解码器
  • 区分:union(),coalesce () 和 repartition ()
  • TCP原理解析
  • 『VUE』vue-quill-editor 添加超链接的同时为文字添加颜色(详细图文注释)
  • Oracle 物理存储与逻辑管理
  • DevOps体系之Jmeter
  • React 第四十五节 Router 中 useHref() Hook的使用详解及注意事项
  • 【北邮通信系统建模与仿真simulink笔记】(2)2.3搭建仿真模型模块操作运行仿真
  • 高效数据库管理新体验:SQLynx 3.7 功能解析与团队协作场景实践
  • BGP为什么要配置对等IP?
  • 企业异构系统和信息孤岛应用信息集成的方案
  • 产品经理面经(三)
  • 电商系统搭建对企业的多维影响与战略价值
  • 帕鲁杯证书在线生成-仅供娱乐
  • 20T资源大礼包,自用,自取
  • Spring Boot与Disruptor高性能队列整合指南
  • 深入详解 DICOM 二维图像的空间定位原理
  • 打卡Day34
  • 用服务器ip做网站页面/网络服务提供者不履行法律行政法规规定
  • 高端娱乐网站建设/aso关键词覆盖优化
  • 工作室网站免费建设/优化公司流程制度
  • 长治网站建设龙采科技技术支持/百度服务中心投诉
  • 做网站怎插入背景/西安楼市最新房价
  • 大连开发区网站/百度一下搜索引擎