正则表达式中的特殊字符

举报
福州司马懿 发表于 2025/09/21 23:57:50 2025/09/21
【摘要】 在正则表达式中,特殊字符(也称为元字符)是具有特殊含义的字符,用于定义匹配规则。它们与普通字符(如字母、数字)不同,需要通过转义(通常加反斜杠 \)来表示其字面意义。以下是正则表达式中常见的特殊字符及其用法: 一、基础特殊字符字符含义示例.匹配任意单个字符(除换行符 \n,除非启用 DOTALL 模式)。a.c → “abc”, “a1c”, “a c”^匹配字符串的开头(或在字符组 [] ...

在正则表达式中,特殊字符(也称为元字符)是具有特殊含义的字符,用于定义匹配规则。它们与普通字符(如字母、数字)不同,需要通过转义(通常加反斜杠 \)来表示其字面意义。以下是正则表达式中常见的特殊字符及其用法:


一、基础特殊字符

字符 含义 示例
. 匹配任意单个字符(除换行符 \n,除非启用 DOTALL 模式)。 a.c → “abc”, “a1c”, “a c”
^ 匹配字符串的开头(或在字符组 [] 内表示否定)。 ^Hello → 以 “Hello” 开头的字符串
$ 匹配字符串的结尾 world$ → 以 “world” 结尾的字符串
* 匹配前面的元素0次或多次 ab*c → “ac”, “abc”, “abbc”
+ 匹配前面的元素1次或多次 go+l → “gol”, “gool”, “gooool”
? 匹配前面的元素0次或1次(或表示非贪婪模式的修饰符)。 colou?r → “color” 或 “colour”
` ` 表示逻辑或(匹配左边或右边的表达式)。

二、字符组(Character Classes)

字符 含义 示例
[ ] 匹配括号内的任意一个字符 [abc] → “a”, “b”, 或 “c”
[^ ] 匹配不在括号内的任意一个字符(否定字符组)。 [^0-9] → 非数字字符
[a-z] 匹配小写字母范围(可组合使用)。 [a-zA-Z0-9] → 字母或数字
\d 匹配数字(等价于 [0-9])。 \d{3} → “123”, “456”
\D 匹配非数字(等价于 [^0-9])。 \D+ → “abc”, “!@#”
\w 匹配单词字符(字母、数字、下划线,等价于 [a-zA-Z0-9_])。 \w+ → “Java”, “hello_123”
\W 匹配非单词字符(等价于 [^\w])。 \W+ → " ", “-”, “@”
\s 匹配空白字符(空格、制表符 \t、换行符 \n 等)。 \s+ → " \t\n"
\S 匹配非空白字符(等价于 [^\s])。 \S+ → “Hello”, “123”

三、量词(Quantifiers)

字符 含义 示例
{n} 匹配前面的元素恰好 n 次 \d{4} → “2023”
{n,} 匹配前面的元素至少 n 次 \d{2,} → “10”, “123”, “1000”
{n,m} 匹配前面的元素至少 n 次,最多 m 次 \d{2,4} → “12”, “123”, “1234”
* 等价于 {0,}(0次或多次)。 ab*c → “ac”, “abc”, “abbc”
+ 等价于 {1,}(1次或多次)。 go+l → “gol”, “gool”
? 等价于 {0,1}(0次或1次)。 colou?r → “color” 或 “colour”

四、边界匹配(Anchors)

字符 含义 示例
^ 匹配字符串的开头(或在多行模式下匹配行的开头)。 ^Hello → “Hello…”
$ 匹配字符串的结尾(或在多行模式下匹配行的结尾)。 world$ → “…world”
\b 匹配单词边界(即单词与非单词字符之间的位置)。 \bcat\b → “cat”(不匹配 “category”)
\B 匹配非单词边界 \Bcat\B → “scatter” 中的 “cat”

五、分组与引用

字符 含义 示例
( ) 捕获分组:将多个字符视为一个单元,并记住匹配的文本(可通过 \1, \2 引用)。 (ab)+ → “ab”, “abab”
(?: ) 非捕获分组:分组但不记住匹配的文本(性能更高)。 (?:ab)+ → 同上,但不捕获分组
\n 引用第 n 个捕获分组(n 为 1-9 的数字)。 (\d)\1 → “11”, “22”(匹配重复数字)

六、转义字符

如果需要匹配特殊字符本身的字面值(而非其特殊含义),需用反斜杠 \ 转义:

字符 转义后含义 示例
\. 匹配字面意义的点号 . 192\.168\.1\.1 → “192.168.1.1”
\\ 匹配字面意义的反斜杠 \ C:\\Users\\ → “C:\Users”
\* 匹配字面意义的星号 * a\*b → “a*b”

七、高级特殊字符

字符 含义 示例
?= 正向预查:匹配后面跟着指定模式的字符串(不消耗字符)。 foo(?=bar) → “foobar” 中的 “foo”
?! 负向预查:匹配后面不跟着指定模式的字符串。 foo(?!bar) → “foobaz” 中的 “foo”
?<= 正向回顾后发:匹配前面是指定模式的字符串(不消耗字符)。 (?<=foo)bar → “foobar” 中的 “bar”
?<! 负向回顾后发:匹配前面不是指定模式的字符串。 (?<!foo)bar → “hellobar” 中的 “bar”

八、常见正则表达式示例

  1. 匹配邮箱地址
    ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
    
  2. 匹配URL
    https?://(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_\+.~#?&//=]*)
    
  3. 匹配手机号(中国)
    ^1[3-9]\d{9}$
    
  4. 提取HTML标签
    <([a-z]+)([^<]+)*(?:>(.*?)<\/\1>|\s+\/>)
    

总结

  • 特殊字符是正则表达式的核心,通过组合它们可以构建复杂的匹配规则。
  • 转义是关键:若需匹配字面意义的特殊字符(如 .*),需用 \ 转义。
  • 分组与引用可用于提取或重复匹配子模式。
  • 预查回顾后发用于更精确的上下文匹配(如“匹配后面跟着X的Y”)。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。