正则表达式 – 语法

正则表达式语法详解

正则表达式的语法主要由普通字符元字符组成。元字符是具有特殊含义的符号,用于描述复杂的匹配规则。下面系统地介绍最常用、最核心的语法元素(以常见引擎如 JavaScript、Python、PCRE 为准,大多数语言一致)。

1. 基本匹配

  • 普通字符:直接匹配自身。
    示例:abc 匹配 “abc”。
  • .(点号):匹配任意单个字符(除了换行符 \n,某些引擎在特定模式下可包括)。
    示例:a.c 匹配 “abc”、”a1c”、”a#c” 等。

2. 位置锚定

元字符含义示例匹配示例
^匹配字符串或行的开头^abc“abcde” 中的 “abc”
$匹配字符串或行的结尾abc$“xyzabc” 中的 “abc”
\b匹配单词边界\bcat\b“cat”(不匹配 “concat” 中的 cat)
\B匹配非单词边界\Bcat\B“concat” 中的 “cat”

3. 量词(重复次数)

量词作用于前面的单个字符、字符集或分组

量词含义示例匹配示例
*0 次或多次(贪婪)ab*“a”、”ab”、”abbb”
+1 次或多次(贪婪)ab+“ab”、”abb”(不匹配 “a”)
?0 次或 1 次(贪婪)ab?“a”、”ab”
{n}正好 n 次a{3}“aaa”
{n,}至少 n 次a{2,}“aa”、”aaa” 等
{n,m}n 到 m 次(含 n 和 m)a{2,4}“aa”、”aaa”、”aaaa”
  • 贪婪 vs 懒惰(非贪婪):默认量词是贪婪的(匹配尽可能多),在量词后加 ? 变为懒惰(匹配尽可能少)。
    示例:
  • 贪婪:<.*> 匹配 “hello” 中的整个 “hello”
  • 懒惰:<.*?> 匹配 “” 和 “” 分别

4. 字符集合

语法含义示例匹配示例
[abc]匹配括号内任意一个字符[aeiou]所有元音字母
[^abc]否定:匹配不在括号内的任意字符[^0-9]非数字
[a-z]范围:a 到 z 的任意字符[A-Za-z0-9]字母和数字
[a-zA-Z]多个范围可组合

常用简写(等价于字符集合):

简写等价于含义
\d[0-9]数字
\D[^0-9]非数字
\w[A-Za-z0-9_]单词字符(字母、数字、下划线)
\W[^A-Za-z0-9_]非单词字符
\s[ \t\r\n\f]空白字符(空格、Tab、换行等)
\S非空白字符

5. 分组与选择

语法含义示例说明
(pattern)捕获分组:匹配并记住内容,可后续引用(ab)+匹配 “ab”、”abab” 等
(?:pattern)非捕获分组:只分组,不记住(?:ab)+同上,但不创建捕获组
|或(选择)cat|dog匹配 “cat” 或 “dog”
a(?=b)正向前瞻:a 后面必须紧跟 b(不消耗)Windows(?=10)匹配 “Windows10” 中的 “Windows”
a(?!b)负向前瞻:a 后面不能紧跟 b\d+(?!px)匹配不以 px 结尾的数字
(?<=b)a正向后瞻:a 前面必须紧跟 b
(?<!b)a负向后瞻:a 前面不能紧跟 b

6. 转义

  • 需要匹配元字符本身时,用反斜杠 \ 转义。
    示例:
  • \. 匹配点号 “.”
  • \* 匹配星号 “*”
  • \\ 匹配单个反斜杠 “\”

7. 修饰符(Flags)

常见修饰符(放在正则表达式外部,视语言而定):

  • i:忽略大小写(case-insensitive)
  • g:全局匹配(global)
  • m:多行模式(^ 和 $ 匹配每行开头/结尾)
  • s:点号通配模式(. 也可匹配换行符,称为 dotall)
  • u:Unicode 支持(JS 中)

小结:常用组合示例

需求正则表达式示例说明
匹配任意长度数字^\d+$只含数字的整行
匹配邮箱(简版)^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,})+$
匹配 HTML 标签<[^>]+>贪婪匹配一个标签
匹配非空空白行^\s+$只包含空白字符的行

掌握这些语法后,你就能构建绝大多数实际场景所需的正则表达式了。建议多在 regex101.com 上调试练习。

如果你想看某个具体语法的深入示例或练习题,告诉我!

文章已创建 3511

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部