正则表达式笔记
2024-8-23
| 2024-8-23
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
@ZZHow(ZZhow1024)
参考课程:
【【GeekHour】30分钟正则表达式教程】

简介

  • 精确地描述需要匹配的字符组合,从而高效和灵活的处理文本。
  • 应用:
    • 网站验证用户输入信息是否符合规范。
    • 文本编辑软件中进行更高级的搜索和替换。
    • Linux 和 macOS 中通过 grep 和 sed 等命令使用正则表达式进行文本处理。

工具

  • 正则表达式在线工具网站:
  • VS Code 中的 Regex Previewer 插件。
  • Python 中的 re 模块。

基本语法 (Basic)

  • 开始:正则表达式一般使用两个斜线包裹起来,如 /表达式/修饰符
  • 修饰符:
    • gglobal,全局匹配。
    • i:case insensitive,忽略大小写。
    • mmultiline,多行匹配。
    • ssingle line (dotall),默认情况下的圆点 . 是匹配除换行符 \n 之外的任何字符,加上 s 修饰符之后 . 中包含换行符 \n
    • uunicode,开启完整的 Unicode 支持。
    • y:sticky,粘滞(Sticky)模式,在文本中的确切位置搜索。
  • 匹配字母 或 数字:
    • a,匹配 a。
    • ab,匹配 ab。
    • 1,匹配 1。
  • 匹配任意字符(. 号):
    • ab. 匹配 ab 后加上一个任意字符的字符串。
  • 集合([]方括号):
    • [abc0],匹配 a 或 b 或 c 或 0。
    • [a-zA-Z0-9],匹配 a 至 z 的所有小写字母、A 至 Z 的所有大写字母 或 0 至 9 的数字。
    • [^a-zA-Z],匹配除 a 至 z 的所有小写字母 和 A 至 Z 的所有大写字母以外的字符。
  • 预定义字符类:
    • \d,匹配所有数字,作用同 [0-9]
    • \D,匹配所有非数字,作用同 [^0-9]
    • \w,匹配所有字母、数字 或 下划线,作用同 [a-zA-Z0-9_]
    • \W,匹配除字母、数字 和 下划线以外的字符,作用同 [^a-zA-Z0-9_]
    • \s,匹配空白字符(空格 或 Tab),作用同 [ ]
    • \S,匹配除空白字符(空格 或 Tab)以外的字符,作用同 [^ ]
  • 需要转义的字符:
    • * . ? + $ ^ [ ] ( ) { } | \ /,匹配以上字符时需要在字符钱加上 \

位置和边界匹配 (Anchors)

  • 行边界
    • 修饰符
      • ^:表示每一行的开头。
      • $:表示每一行的结尾。
    • 例子
      • ^abc$:一行的开头和结尾之间只有 abc 的字符串。
  • 单词边界
    • 修饰符
      • \b:表示单词边界。
      • \B:表示非单词边界。
    • 例子
      • \bon:匹配以 on 开头的单词中的 on。
      • on\b:匹配以 on 结尾的单词中的 on。
      • \bon\b:匹配独立的 on 的单词。
      • \Bon\B:匹配在单词中间的 on。

量词 (Quantifiers)

  • +:表示前面的字符重复了一次多次
    • 例如
      • ab+:匹配 ab、abb、abbb…
  • *:表示前面的字符重复了零次多次。
    • 例如
      • ab*:匹配 a、ab、abb…
  • ?:表示前面的字符重复了零次一次
    • 例如
      • ab?:匹配 a 和 ab。
  • {次数}:指定前面字符重复的次数。
    • 例如
      • ab{2}:匹配 abb。
      • ab{3}:匹配 abbb。
      • ab{1,3}:匹配 ab、abb 和 abbb。
      • ab{3,}:匹配 abbb、abbbb、abbbbb…
      • ab{3,}?:非贪婪匹配,只会匹配 abbb。

分组和捕获 (Groups)

  • 使用 () 进行分组,使用 $数字 进行捕获,使用 \数字 进行引用。
  • 非捕获分组:(?:匹配规则),该分组将不会被捕获到。
  • 例子
    • (ab){3}:匹配 ababab。
    • (A|a)pple:匹配 Apple 和 apple。
    • 替换年月日的顺序:
      • 数据
        • 2024-08-19
        • 2024/08/20
        • 2024_08_21
        • 2024.08.22
        • 20240823
      • 分组
        • /(\d{4})[-/_.]?(\d{1,2})[-/_.]?(\d{1,2})/gm
      • 捕获
        • $2-$3-$1
      • 替换结果
        • 08-19-2024
        • 08-20-2024
        • 08-21-2024
        • 08-22-2024
        • 08-23-2024
    • 引用:
      • 数据
        • alibaba
        • tencent
        • google
        • apple
        • microsoft
      • 分组和引用
        • /\b([a-z])[a-z]*\1\b/gm
      • 匹配结果
        • alibaba
        • tencent

前瞻 (Lookahead) 和 后顾 (Lookbehind)

  • 作用:匹配某些字符前面或后面的内容,而不包含这些字符本身。
  • 正向前瞻:(?=匹配规则)
    • 例如
      • \$(?=\d+),匹配 $123、$321、$23… 中的 $,匹配所有数字前的 $。
  • 负向前瞻:(?!匹配规则)
    • 例如
      • \$(?!\d+),匹配 $abc、$bac、$ac… 中的 $,匹配所有非数字前的 $。
  • 正向后顾:(?<=匹配规则)
    • 例如
      • (?<=\$)\d+ ,匹配 $123、$321、$23… 中的 123、321、23…,匹配所有 $ 后的数字。
  • 负向后顾:(?<!匹配规则)
    • 例如
      • (?<!\$)\d+,匹配 SU7、RTX4080、#123… 中的 7、4080、123…,匹配所有非 $ 后的数字。
      • (?<!\$)\b\d+\b,可避免匹配 $123、$213、$23… 中的 23、13、3…

正则表达式版本

  • POSIX 基本 - Basic Regular Expression (BRE)
  • POSIX 扩展 - Extended Regular Expression (ERE)
  • Perl 兼容正则表达式 (PCRE)
  • 其他版本 (Python、Java、JavaScript…)
💡
注意事项
在使用正则表达式时,若不能匹配想要的结果,不一定是正则表达式写错,可能是使用的正则表达式引擎不支持此特性,需要查询对应版本的文档。
  • 开发
  • 学技术
  • JavaWeb开发笔记合集Vue2+Vue3前端开发笔记合集
    Loading...
    目录