0%

常用正则表达式

正则表达式是一种强大的文本匹配工具,通过特定的语法规则,可以实现对字符串的灵活匹配。在本文中,我们将介绍一系列常用的正则表达式,覆盖了匹配任意字符、多个字符包含匹配、排除字符包含匹配、重复匹配、单词边界匹配、字符串边界、子表达式(分组)、回溯引用以及前后查找等内容

匹配任意字符

使用.通配符可以匹配任意的字符(单个字符)

例如,a.b可以匹配到”acb”、”aab”、”a1b”等字符串。

多个字符包含匹配

通过使用[]将允许匹配的字符穷举在括号中,如[abc123]可以匹配a、b、c、1、2、3中的任意一个字符

一些常用的范围可以直接使用范围匹配,如[a-zA-Z1-9]

排除字符包含匹配

在上述括号中开头添加^即可匹配除括号中字符的其他字符,如[^abc123]可以匹配除a、b、c、1、2、3中的其他任意一个字符

重复匹配
  • 匹配最少n个: {n,}
  • 匹配精确的n个: {n}
  • 匹配最少n个,最多m个: {n, m}
  • 匹配最少一个: +
  • 匹配0个或1个: ?
  • 匹配0个或多个: *

这些重复匹配的模式能够灵活地处理不同数量的字符,满足各种匹配需求。例如,\d{2,4}可以匹配2到4个数字

对于*+{n,}这种没有匹配数量上限的,如果想让它尽可能少匹配的时候,可以在后面添加一个?符号

单词边界匹配

\b可以用于匹配单词(由大小写字母及下划线组成)和非单词的边界。这在需要确保匹配的是整个单词而不是单词的一部分时非常有用。例如,\bword\b可以匹配到 “word”,而不会匹配到 “subword” 中的 “word”。

字符串边界

使用^可以匹配字符串的开头,$可以匹配字符串的结尾。这样的匹配规则确保了正则表达式模式不会匹配到中间的某个部分

子表达式(分组)

可以通过括号将表达式分组,整体进行次数、选择等匹配

例如,(\d{3}\.){3}可以整体将三个数字+点整体匹配三次;(a1|a2)可以匹配a1或者a2

回溯引用

回溯引用允许我们使用之前匹配到的分组。例如,[ ]+(\w+)[ ]+\1,其中[ ]+(\w+)[ ]是匹配一个空格+多个字符+一个空格,后面的\1会使用之前的第一个分组(\w+)中匹配到的内容,如匹配 this is a name name中的两个 name

前后查找

有时候我们只想匹配某些字符,但并不希望它们作为返回结果。这时候可以使用前后查找

  • 向前查找:以 ?= 开头的表达式,如 https{0,1}(?=:) 可以匹配到url中的协议,不包含冒号。这样可以确保匹配的是协议部分,而不包括冒号在内。
  • 向后查找:以 ?<= 开头的表达式,如 (?<=\$)[0-9\.]+ 可以匹配到 $123.45 中的金额部分,而不包含 $ 符号本身
常用表达式
表达式 匹配内容
\s 空白字符
\S 非空白字符
\d 数字
\D 非数字
\w 一个单词字符a-z、A-Z以及下划线_
\W 非单词字符
\b 单词边界
\B 非单词边界
\n 换行符
\r 回车符
\t Tab
^ 字符串开头
$ 字符串结尾