核心理念
单个字符匹配:正则表达式引擎会从左到右检查目标字符串,尝试将模式中的一个字符与目标字符串中的一个字符进行匹配。
1. 匹配字面字符(普通字符)
绝大多数普通字符(字母、数字),会直接匹配它们自身。
- 示例: 模式
a会匹配目标字符串中所有的字母"a"。- 在
"apple"中匹配 apple。 - 在
"banana"中匹配 banana。
- 在
注意事项:
- 默认情况下,匹配是区分大小写的。
a不能匹配"a"。 - 如果希望不区分大小写,通常需要在正则表达式外设置一个标志(或叫模式修饰符),例如在javascript中写作
/pattern/i,其中的i就是忽略大小写标志。
2. 匹配任意单个字符(.点号)
元字符 . 是一个非常强大的通配符。
- 功能:匹配任意一个字符(除了换行符,如
\n,\r等,除非设置了s标志)。 - 示例: 模式
a.c- 匹配
"abc" - 匹配
"a c"(中间是空格) - 匹配
"a@c" - 匹配
"a|c" - 不匹配
"ac"(因为中间缺少一个字符) - 不匹配
"abbc"(因为.只匹配一个字符)
- 匹配
注意事项:
- 转义:如果你想匹配一个真正的点号(比如在域名或ip地址中),你需要使用反斜杠
\对其进行转义,即\.。a.c会匹配aac,abc等。a\.c只会匹配字面字符串"a.c"。
- 换行符:默认情况下,
.不匹配换行符。这是为了在处理多行文本时能清晰地划分行。如果你需要.也匹配换行符(即进行“单行模式”或“点号通配模式”匹配),需要设置s标志。例如在javascript中:/a.c/s。
3. 匹配字符组([...]方括号)
当你需要匹配方括号内列出的任意一个字符时,使用字符组。
- 功能:匹配括号内的任意一个字符。
- 示例: 模式
[aeiou]会匹配所有的小写元音字母。- 在
"hello"中匹配 hello。 - 在
"world"中匹配 world。
- 在
注意事项:
- 范围表示:可以使用连字符
-来表示一个范围,这非常方便。[0-9]:匹配任意一个数字。等价于\d。[a-z]:匹配任意一个小写字母。[a-za-z]:匹配任意一个大小写字母。[0-9a-fa-f]:匹配一个十六进制数字的字符。
- 元字符在字符组内:在字符组内,大多数元字符(如
.,*,+,?)会失去特殊含义,被当作普通字符处理。例外情况:^:如果出现在字符组的开头,表示“取反”。-:如果出现在字符组的开头或结尾,表示普通的连字符。如果出现在中间,表示范围(如a-z)。]:表示字符组的结束,所以要匹配字面的],必须放在字符组的最开头或用反斜杠转义(但并非所有引擎都支持后者,最好放在开头)。\:仍然保留转义功能。
4. 匹配反义字符组([^...]方括号内取反)
字符组开头使用 ^ 表示“取反”。
- 功能:匹配任何不在方括号内列出的字符。
- 示例: 模式
[^0-9]- 匹配
"a","@"," "(空格)。 - 不匹配
"0","1", …,"9"。
- 匹配
注意事项:
^只有在字符组开头才表示取反。在中间如[a^b]表示匹配a,^, 或b。- 它仍然匹配一个字符,只是这个字符不能是组内指定的那些。
5. 预定义字符集(缩写)
为了方便,正则表达式预定义了一些常用字符集的缩写。
| 元字符 | 等效字符组 | 含义 |
|---|---|---|
\d | [0-9] | 匹配一个数字字符。 |
\d | [^0-9] | 匹配一个非数字字符。 |
\w | [a-za-z0-9_] | 匹配一个单词字符(字母、数字、下划线)。 |
\w | [^a-za-z0-9_] | 匹配一个非单词字符。 |
\s | [ \t\r\n\f] | 匹配一个空白字符(空格、制表符、换行符等)。 |
\s | [^ \t\r\n\f] | 匹配一个非空白字符。 |
注意事项:
- 语言差异:
\w的具体定义可能因编程语言或正则引擎而异。例如,在某些环境下(如python 3的re.ascii标志未设置时),\w可能会匹配本地的字母字符,如中文汉字。在大多数默认情况下,它只匹配ascii字符。 - 记忆技巧:小写字母(
\d,\w,\s)表示“是”,大写字母(\d,\w,\s)表示“非”。
总结与核心注意事项表格
| 模式 | 匹配内容 | 关键注意事项 |
|---|---|---|
a | 字符 a | 区分大小写。 |
. | 任意字符(除换行符) | 需转义为 \. 来匹配字面点号;可设置 s 标志使其匹配换行符。 |
[abc] | a, b, 或 c 中的任意一个 | 内部元字符大多失去特殊含义。使用 - 表示区间(如 [a-z])。 |
[^abc] | 除 a, b, c 外的任意一个字符 | ^ 必须在最开头才表示取反。 |
\d | 数字 [0-9] | 等价于 [0-9]。 |
\w | 单词字符 [a-za-z0-9_] | 具体范围可能因环境和配置而异。 |
\s | 空白字符 | 包括空格、换行、制表符等。 |
实际应用示例
- 匹配一个十六进制数字字符:
[0-9a-fa-f] - 匹配一个括号内的字符:
[()](匹配左圆括号或右圆括号)。注意,在字符组内,(和)就是普通字符,不需要转义。 - 匹配一个非字母的字符:
[^a-za-z]或\w(但注意\w也排除数字和下划线)。 - 匹配一个文件扩展名的点:
\.txt(匹配.txt,确保点号是字面点号)。
最后的黄金法则:当你对某个元字符的行为不确定时,进行转义(在其前面加 \)通常是最安全的选择,除非它在字符组 [...] 内且不是特殊字符(^, -, ])。
总结
到此这篇关于正则表达式中单个字符匹配的文章就介绍到这了,更多相关正则表达式单个字符匹配内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论