欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > 正则表达式

正则表达式

2025/2/12 21:15:35 来源:https://blog.csdn.net/Yerosius1/article/details/145464200  浏览:    关键词:正则表达式

正则表达式

在线正则表达式网站:https://regexr-cn.com/

注:若无特殊说明,本文章严格区分字符(单个字符)与字符串(多个字符)。

字符串模式匹配

字符串模式匹配:根据模式串(Pattern)的数量,分为单模匹配多模匹配。设原串 S S S、模式串 T T T T T T S S S中可能多次出现,在 S S S中找所有 T T T的相等串的过程即为单模匹配;设原串 S S S、模式串 { T 1 , ⋯ , T n } \set{T_1,\cdots ,T_n} {T1,,Tn},在 S S S中找到所有 { T 1 , ⋯ , T n } \set{T_1,\cdots ,T_n} {T1,,Tn}的相等串的过程即为多模匹配

正则表达式是通配符(?*)的扩展,常用于字符串的模式匹配。通过修改模式串,可使模式串按照一定规则进行匹配。

匹配符号

若要匹配这些符号本身,则需将其本身转义(\)。

  • .:匹配除\n外的任意字符(类似于通配符中的?)。如a.b匹配acb,但不匹配abaccb
  • [ ]:字符集。匹配字符集中的任意字符。若需匹配的字符间呈连续性(如字典序、数字序列等),中间部分范围可用-省略。如a[b-dB-D]可匹配abacadaBaCaD
  • [^ ]:取反字符集。匹配除该字符集外的任意字符。如a[^a-b]匹配ac等,但不匹配aaab
  • 预定义类:
    • \d:任意数字,等价于[0-9]
    • \D:任意数字,等价于[^0-9]
    • \w:任意字母、数字、下划线
    • \W:任意字母、数字、下划线
    • \s:任意空白字符(SpaceTab等)
    • \S:任意空白字符

边界匹配

边界匹配符可搭配使用。使用边界匹配符后,默认仅对文本首行进行边界匹配。

  • ^ :匹配仅在行头出现的字符串。如^ab匹配abcd abbc aabcabcdab,但不匹配abbcaabc
  • $:匹配仅在行尾出现的字符串。如ab$匹配 aabb abab cbabcbab中的ab,但不匹配aabbabab
  • \b :匹配仅在词头出现的字符串。如\bab匹配abcd abaa babaabcdabaaab,但不匹配baba
  • \b:匹配仅在词尾出现的字符串。如ab\b匹配cdab aaab cabaadabaaab中的ab,但不匹配caba
  • \B :匹配非词头出现的字符串(位于单词的中间或末尾)。如\Bab匹配abaa aaba aaabaabaaaab中的ab,但不匹配abaa
  • \B:匹配非词尾出现的字符串(位于单词的开头或中间)。如ab\B匹配abaa aaba aaababaaaaba中的ab,但不匹配aaab

匹配修饰符

  • g:全局匹配,匹配模式串出现的所有位置
  • i:忽略模式串大小写
  • m:对所有行都进行边界匹配
  • s:使.支持匹配\n

匹配量词及其匹配模式

匹配量词

  • {<number>}:匹配其前面的字符出现<number>次。若表示重复次数区间,则用,分隔,表示重复次数的闭区间
    若不给定区间端点,由于贪婪匹配机制,不给定的端点默认为 0 0 0(左端点)和 + ∞ +\infty +(右端点)。如abt{3}仅匹配abtttabt{3,5}仅匹配abtttabttttabtttttabt{3,}匹配abtttabtttt等。
  • *:匹配其前面的字符出现 ≥ 0 \ge 0 0次,等价于 {0,}。如abt*匹配ababtabtt等。
  • +:匹配其前面的字符出现 ≥ 1 \ge 1 1次,等价于 {1,}。如abt+匹配abtabtt等,但不匹配 ab
  • ?:匹配其前面的字符出现 0 0 0 1 1 1次,等价于 {0,1}。如abt?匹配ababt,但不匹配abt等。

量词的匹配模式

  • 贪婪匹配:尽可能多匹配,直到无法再进行匹配为止。量词默认为贪婪匹配。如abt*匹配ababtabtt等。
  • 非贪婪匹配:尽可能少匹配,一旦满足匹配条件则立即停止匹配。在量词后加?(懒惰符)开启非贪婪匹配。如abt*?仅匹配abt

分组 捕获 引用

  • 分组:将若干字符组织成一个整体的字符串进行匹配
  • ( )非命名捕获分组,分组并捕获(记忆化)该匹配。如(ab)+则用于字符串ab出现 ≥ 1 \ge 1 1次,匹配ababab等。
  • (?: )非命名非捕获分组。匹配后不进行捕获。
  • (?P<<tag_name>><regex>)命名捕获分组<tag_name>为分组名,其被<>包围;<regex>为正则表达式内容。
  • 引用:重复使用先前被分组捕获的内容
    • 反向引用:在匹配模式时,当遇到反向引用时,不再继续向后匹配,而是反过来向前引用先前的捕获分组。
      反向索引引用:适用于非命名捕获分组,通过形如\<num>的索引引用访问先前的捕获。
      反向命名引用:适用于命名捕获分组,通过形如(?P=<tag_name>)引用访问先前的捕获。
    • 替换引用:在替换时引用。
      替换索引引用:适用于非命名捕获分组,通过形如$<num>的索引引用访问先前的捕获。
      替换命名引用:适用与命名捕获分组,通过形如\g<name>引用访问先前的捕获。

逻辑运算

  • |:或。位于两个模式串之间。可用于实现多模匹配。如abc|def可匹配abc,也可匹配def

前瞻 后顾

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com