正则表达式中的特殊字符
举报
福州司马懿
发表于 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”
?
负向回顾后发:匹配前面不是指定模式的字符串。
(?
八、常见正则表达式示例
匹配邮箱地址:^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
匹配URL:https?://(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_\+.~#?&//=]*)
匹配手机号(中国):^1[3-9]\d{9}$
提取HTML标签:<([a-z]+)([^<]+)*(?:>(.*?)<\/\1>|\s+\/>)
总结
特殊字符是正则表达式的核心,通过组合它们可以构建复杂的匹配规则。
转义是关键:若需匹配字面意义的特殊字符(如 .、*),需用 \ 转义。
分组与引用可用于提取或重复匹配子模式。
预查和回顾后发用于更精确的上下文匹配(如“匹配后面跟着X的Y”)。
推荐
华为开发者空间发布
让每位开发者拥有一台云主机
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
正则表达式
点赞
收藏
关注作者
友情链接:
©Copyright © 2022 2006年世界杯歌曲_冰岛世界杯排名 - guoyunzhan.com All Rights Reserved.