1- # 第六章 正则表达式库
1+ # 第 6 章 正则表达式库
22
33> 内容修订中
44
3838特殊字符是正则表达式里有特殊含义的字符,也是正则表达式的核心匹配语法。参见下表:
3939
4040| 特别字符| 描述|
41- | :--:| :--|
42- | ` $ ` | 匹配输入字符串的结尾位置。|
43- | ` ( ` ,` ) ` | 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。|
44- | ` * ` | 匹配前面的子表达式零次或多次。|
45- | ` + ` | 匹配前面的子表达式一次或多次。|
46- | ` . ` | 匹配除换行符 ` \n ` 之外的任何单字符。|
47- | ` [ ` | 标记一个中括号表达式的开始。|
48- | ` ? ` | 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。|
49- | ` \ ` | 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, ` n ` 匹配字符 ` n ` 。` \n ` 匹配换行符。序列 ` \\ ` 匹配 ` '\' ` 字符,而 ` \( ` 则匹配 ` '(' ` 字符。|
50- | ` ^ ` | 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。|
51- | ` { ` | 标记限定符表达式的开始。|
52- | ` \ ` | 指明两项之间的一个选择。|
41+ | :--- :| :---------------------------------------------------- --|
42+ | ` $ ` | 匹配输入字符串的结尾位置。|
43+ | ` ( ` ,` ) ` | 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。|
44+ | ` * ` | 匹配前面的子表达式零次或多次。|
45+ | ` + ` | 匹配前面的子表达式一次或多次。|
46+ | ` . ` | 匹配除换行符 ` \n ` 之外的任何单字符。|
47+ | ` [ ` | 标记一个中括号表达式的开始。|
48+ | ` ? ` | 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。|
49+ | ` \ ` | 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, ` n ` 匹配字符 ` n ` 。` \n ` 匹配换行符。序列 ` \\ ` 匹配 ` '\' ` 字符,而 ` \( ` 则匹配 ` '(' ` 字符。|
50+ | ` ^ ` | 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。|
51+ | ` { ` | 标记限定符表达式的开始。|
52+ | ` \ ` | 指明两项之间的一个选择。|
5353
5454### 限定符
5555
5656限定符用来指定正则表达式的一个给定的组件必须要出现多少次才能满足匹配。见下表:
5757
5858
5959| 字符| 描述|
60- | :--:| :--|
60+ | :--- :| :---------------------------------------------------- --|
6161| ` * ` | 匹配前面的子表达式零次或多次。例如,` foo* ` 能匹配 ` fo ` 以及 ` foooo ` 。` * ` 等价于` {0,} ` 。|
6262| ` + ` | 匹配前面的子表达式一次或多次。例如,` foo+ ` 能匹配 ` foo ` 以及 ` foooo ` ,但不能匹配 ` fo ` 。` + ` 等价于 ` {1,} ` 。|
6363| ` ? ` | 匹配前面的子表达式零次或一次。例如,` Your(s)? ` 可以匹配 ` Your ` 或 ` Yours ` 中的` Your ` 。` ? ` 等价于 ` {0,1} ` 。|
@@ -79,7 +79,7 @@ C++11 提供的正则表达式库操作 `std::string` 对象,模式 `std::rege
7979
8080- ` [a-z]+\.txt ` : 在这个正则表达式中, ` [a-z] ` 表示匹配一个小写字母, ` + ` 可以使前面的表达式匹配多次,因此 ` [a-z]+ ` 能够匹配一个小写字母组成的字符串。在正则表达式中一个 ` . ` 表示匹配任意字符,而 ` \. ` 则表示匹配字符 ` . ` ,最后的 ` txt ` 表示严格匹配 ` txt ` 则三个字母。因此这个正则表达式的所要匹配的内容就是由纯小写字母组成的文本文件。
8181
82- ` std::regex_match ` 用于匹配字符串和正则表达式,有很多不同的重载形式。最简单的一个形式就是传入` std::string ` 以及一个 ` std::regex ` 进行匹配,当匹配成功时,会返回 ` true ` ,否则返回 ` false ` 。例如:
82+ ` std::regex_match ` 用于匹配字符串和正则表达式,有很多不同的重载形式。最简单的一个形式就是传入 ` std::string ` 以及一个 ` std::regex ` 进行匹配,当匹配成功时,会返回 ` true ` ,否则返回 ` false ` 。例如:
8383
8484``` cpp
8585#include < iostream>
@@ -132,9 +132,7 @@ bar.txt sub-match[1]: bar
132132
133133本节简单介绍了正则表达式本身,然后根据使用正则表达式的主要需求,通过一个实际的例子介绍了正则表达式库的使用。
134134
135- > 本节提到的内容足以让我们开发编写一个简单的 Web 框架中关于URL匹配的功能。
136-
137- > ~~关于这方面的开发和细节,可以通过项目课:[C++ 开发 Web 服务框架](https://www.shiyanlou.com/courses/568) 进行进一步学习。~~ TODO: 将这部分内容补充为习题
135+ > 本节提到的内容足以让我们开发编写一个简单的 Web 框架中关于URL匹配的功能,请参考习题 TODO
138136
139137## 进一步阅读的参考资料
140138
0 commit comments