Regex 教程

2025年4月14日 | 阅读 12 分钟
Regex Tutorial

术语 Regex 代表 Regular expression(正则表达式)。regexregexpregular expression 是一个由不同字符组成的序列,用于描述特定的搜索模式。它也被称为 Rational expression(有理表达式)。
它主要用于搜索和操作文本字符串。简单来说,您可以借助正则表达式轻松搜索模式,并将其替换为匹配的模式。

此概念或工具几乎用于所有编程或脚本语言,例如 PHP、CC++、Java、Perl、JavaScript、Python、Ruby 等。它也用于文字处理器(如 Word),帮助用户在文档中搜索文本,也用于各种 IDE。
正则表达式定义的模式从左到右应用于给定的字符串或文本。

正则表达式字符

以下是正则表达式的不同类型的字符

  1. 元字符
  2. 量词
  3. 组和范围
  4. 转义字符或字符类

元字符

元字符描述示例
^此字符用于匹配字符串开头的表达式。^a 是一个与以 'a' 开头的字符串匹配的表达式,例如 "aab", "a9c", "apr", "aaaaab" 等。
$$ 符号用于匹配字符串结尾左侧的表达式。r$ 是一个与以 r 结尾的字符串匹配的表达式,例如 "aaabr", "ar", "r", "aannn9r" 等。
.此字符用于匹配字符串中的任何单个字符,不包括换行符,即 /n。b.x 是一个匹配字符串(如 "bax", "b9x", "bar")的表达式。
|它用于匹配任一侧的特定字符或一组字符。 如果左侧的字符匹配,则忽略右侧的字符。A|b 是一个给出各种字符串的表达式,但每个字符串都包含 a b
\它用于转义字符串中此符号后的特殊字符。
A它用于匹配字符串中的字符“A”。此表达式匹配那些至少存在一次 A 的字符串。这样的字符串是 "Amcx", "mnAr", "mnopAx4"
Ab它用于匹配字符串中的子字符串“ab”。此表达式匹配那些至少存在一次 'Ab' 的字符串。这样的字符串是 "Abcx", "mnAb", "mnopAbx4"

量词

量词用于正则表达式中,用于指定字符出现的次数。

字符描述示例
+此字符指定其左侧的表达式一次或多次。s+ 是一个给出 "s", "ss", "sss" 等的表达式。
?此字符指定其左侧的表达式 0(零)次或 1(一次)次。aS? 是一个给出 "a" 或 "as" 的表达式,但不是 "ass"。
*此字符指定其左侧的表达式 0 次或更多次Br* 是一个给出 "B", "Br", "Brr", "Brrr" 等的表达式……
{x}它指定其左侧的表达式仅 x 次。Mab{5} 是一个给出包含 5 个 b 的以下字符串的表达式
"Mabbbbb"
{x, }它指定其左侧的表达式 x 次或更多次。Xb{3, } 是一个给出包含至少 3 个 b 的各种字符串的表达式。这样的字符串是 "Xbbb", "Xbbbb" 等。
{x,y}它指定其左侧的表达式至少 x 次,但小于 y 次。Pr{3,6}a 是一个提供两个字符串的表达式。
两个字符串如下
"Prrrr" 和 "Prrrrr"

组和范围

正则表达式中的组和范围定义了括在括号中的字符集合。

字符描述示例
(  )它用于匹配简单括号中的所有内容。A(xy) 是一个与以下字符串匹配的表达式
"Axy"
{   }它用于匹配花括号中为其左侧字符串定义的特定数量的出现次数。xz{4,6} 是一个与以下字符串匹配的表达式
"xzzzzz"
[    ]它用于匹配方括号中定义的字符范围中的任何字符。xz[atp]r 是一个与以下字符串匹配的表达式
"xzar", "xztr" 和 "xzpr"
[pqr]它单独匹配 p、q 或 r。以下字符串与此表达式匹配

"p", "q" 和 "r"。

[pqr][xy]它匹配 p、q 或 r,后跟 x 或 y。以下字符串与此表达式匹配
"px", "qx" 和 "rx", "py", "qy" 和 "ry"。
(?: …)它用于匹配非捕获组。A(?:nt|pple) 是一个与以下字符串匹配的表达式
"Apple"
[^…..]它匹配方括号中未定义的字符。假设, Ab[^pqr] 是一个仅匹配以下字符串的表达式
"Ab"
[a-z]它匹配从 a 到 z 的小写字母。此表达式匹配诸如以下的字符串
"a", "python", "good"。
[A-Z]它匹配从 A 到 Z 的大写字母。此表达式匹配诸如以下的字符串
"EXCELLENT", "NATURE"。
^[a-zA-Z]它用于匹配以小写或大写字母开头的字符串。此表达式匹配诸如以下的字符串
"A854xb", "pv4fv", "cdux"。
[0-9]它匹配从 0 到 9 的数字。此表达式匹配诸如以下的字符串
"9845", "54455"
[aeiou]此方括号仅匹配小写元音。-
[AEIOU]此方括号仅匹配大写元音。-
ab[^4-9]它匹配方括号中未定义的数字或字符。此表达式匹配不包含 5、6、7 和 8 的字符串。

转义字符或字符类

字符描述
\s它用于匹配一个空白字符。
\S它用于匹配一个非空白字符。
\0它用于匹配 NULL 字符。
\a它用于匹配铃声或警报。
\d它用于匹配一个十进制数字,表示从 0 到 9。
\D它用于匹配任何非十进制数字。
\n 它帮助用户匹配新行。
\w它用于匹配字母数字
[0-9a-zA-Z] 字符。
\W它用于匹配一个非单词字符
\b它用于匹配单词边界。

不同语言中的正则表达式

以下脚本和编程语言使用正则表达式

  1. 在 Java 中使用正则表达式
  2. 在 PHP 中使用正则表达式
  3. 在 Python 中使用正则表达式
  4. 在 JavaScript 中使用正则表达式

在 Java 中使用正则表达式 (Java Regex)

Java 语言中,RegexRegular Expression 是一个应用程序编程接口,用于操作、搜索和编辑字符串。 您可以通过在代码中导入 java.util.regex API 包来在 Java 中使用正则表达式。

以下三个类属于 java.util.regex

  1. regex.Pattern:此类有助于定义模式
  2. regex.Matcher:此类有助于使用模式对输入的字符串执行匹配操作。
  3. PatternSyntaxException:此类通过指示正则表达式模式中的语法错误来帮助用户。

util.regex.Pattern 类

此类 (util.regex.Pattern) 是 Regex 的编译版本,可以通过 compile() 方法调用。 compile() 方法接受正则表达式作为第一个参数。此类不提供任何公共构造函数。

以下是 Pattern 类中的不同函数

方法()描述
static Pattern compile(String regex)此方法用于将给定的正则表达式编译成模式。
Matcher Matcher (CharSequence input)此方法创建一个匹配器,用于将模式与给定字符串(由用户输入)进行匹配。
String toString()此方法返回字符串的表示形式。
String[] split(CharSequence input)此方法根据匹配项拆分字符串。
Static Boolean matches(String regex CharSequence input)此方法将正则表达式与给定的输入字符串进行匹配。

util.regex.Matcher 类

此类用于通过在任何对象或 Pattern 上调用 matcher() 函数来对输入字符串执行匹配操作。此类不定义任何公共构造函数。

以下是 Matcher 类中的不同函数

方法()描述
boolean matches()此方法检查正则表达式是否与模式匹配。
boolean find()此方法在字符串中搜索正则表达式的出现次数。
boolean find(int start)此方法从起始索引开始在字符串中搜索正则表达式的出现次数。
String group()此方法有助于查找匹配的子序列。
int start()此方法有助于返回匹配的子序列的起始索引。
int end()此方法有助于返回匹配的子序列的最后一个索引。
int groupCount()此方法有助于返回匹配的子序列的总数。

在 Java 中使用正则表达式的示例

示例 1:此示例有助于理解 Java 代码中的点运算符。

立即测试

输出

Regex Tutorial

示例 2:以下示例使用正则表达式的不同字符。

立即测试

输出

Regex Tutorial

在 PHP 中使用正则表达式

您可以借助 PCRE(Perl 兼容正则表达式)库的函数在 PHP 中使用正则表达式 (regex)。

下表中有不同类型的内置函数,用于处理正则表达式。 这些函数区分大小写。

函数描述
preg_match()如果正则表达式与特定字符串匹配,则 preg_match() 函数返回 true,否则返回 false。
preg_match_all()preg_match_all() 函数用于匹配字符串中模式的所有出现次数。
preg_replace()preg_replace() 函数匹配一个模式,然后用字符串替换它。
preg_split()preg_split() 函数使用正则表达式将字符串分割成子字符串。
Preg_grep()preg_grep() 函数用于返回输入数组中所有与正则表达式模式匹配的元素。

在 PHP 中使用正则表达式的例子

例子 1: 以下示例帮助理解如何在正则表达式中使用字符类或组来匹配字符串。

以上 php 程序给出以下输出

The regular expression and string are the same.

例子 2: 以下示例帮助理解如何在 PHP 代码中使用 '^' 字符。

以上 php 程序给出以下输出

John Carter
John Rambo

在 Python 中使用正则表达式 (Python Regex)

您可以通过在脚本中导入 re 模块,在 Python 代码中使用正则表达式 (Regex)。此模块定义了用于处理正则表达式的各种函数或方法。

下表定义了各种函数

方法描述
re.match()re.match() 方法用于返回与正则表达式匹配的字符串。
re.search()当在字符串或文本中找到模式时,re.search() 方法返回一个匹配对象。
re.findall()re.findall() 方法用于返回一个包含所有匹配项的字符串列表。
re.split()re.split() 方法用于根据与正则表达式的匹配来分割字符串。
re.sub()re.sub() 方法用于将匹配的字符串替换为另一个字符串。

在 Python 中使用正则表达式的例子

例子 1: 此示例帮助理解如何在 python 脚本中使用 findall() 方法。

以上使用正则表达式的 python 程序给出以下输出

['Fruits ', ', Animals ', ', Cars ']

例子 2: 此示例帮助理解如何在 python 脚本中使用 split(), search(), 和 sub() 方法。

以上使用正则表达式的 python 程序给出以下输出

['Zero:', ' one:', ' Two:', ' Three:', ' Four:', ' Five:', ' Six:', ' Seven:', ' eight:', ' Nine:', ' Ten:', ' Twenty:', ' Thirty:', ' Forty:', ' Fifty:', ' Sixty:', ' Seventy:', ' Eighty:', ' Ninety:', ' Hundred:', '']
as 
bs 
cs
pattern not found inside the String

在 JavaScript 中使用正则表达式

您可以借助以下两种字符串方法轻松地在 JavaScript 代码中使用正则表达式

  1. search(): 此方法在字符串中搜索正则表达式,并返回找到匹配项的位置。
  2. Replace(): 此方法用于在替换字符串中匹配的字符后返回字符串。

JavaScript 中的正则表达式示例

例子 1: 此示例在 JavaScript 脚本中使用 search() 方法来理解正则表达式。

立即测试

以上使用正则表达式的 JavaScript 程序给出以下输出

Position of the pattern in a string:40

例子 2: 此示例在 JavaScript 脚本中使用 replace() 方法来理解正则表达式。

立即测试

以上使用正则表达式的 JavaScript 程序给出以下输出

After replacing the substring, the modified string is:
You are a Good Student