1.关于正则表达式中 | 的使用方法
字母的结合顺序要大于逻辑或"|"的优先级,如下这个模式,能匹配f或者good
regex("f|good");
如果要匹配food或者good,那么就要给f,g加上括号:
regex("(f|g)ood");
2.
| 运算符 | 描述 |
|---|---|
| \ | 转义符 |
| (), (?:), (?=), [] | 圆括号和方括号 |
| *, +, ?, {n}, {n,}, {n,m} | 限定符 |
| ^, $, \任何元字符、任何字符 | 定位点和序列(即:位置和顺序) |
| | | 替换,"或"操作 字符具有高于替换运算符的优先级,使得"m|food"匹配"m"或"food"。若要匹配"mood"或"food",请使用括号创建子表达式,从而产生"(m|f)ood"。 |
3.这里举一个看起来稍微复杂点的例子
regex("0|[1-9]+[0-9]{1,}|0\\.\\d{1,}|[1-9]{1,}\\d{0,}\\.+\\d{1,}");
如下顺序来解读:
(1)首先低一点,| 是这个式子中优先顺序最后的,所以这个式子包含如下三个匹配式子:
第一个:0 ,这个没什么好说的,就匹配数0 。
第二个:[1-9]+[0-9]{0,} ,这个也好理解,匹配首位非0的至少2位的整数
第三个:0\\.\\d{1,} ,这个匹配纯小数,也就是整数部分是0的小数。
第四个:[1-9]{1,}\\d{0,}\\.+\\d{1,} ,这个匹配整数部分非0的小数
这个地方是常用的正则表达式汇总
再来一个例子:
- #include <string>
- #include <regex>
- #include <iostream>
- using namespace std;
-
- int main()
- {
- string str = "hello2012-6-12world!!!!!";
- smatch match;
- regex pattern("(\\d{4})-(\\d{1,2})-(\\d{1,2})");
-
- if (regex_search(str,match,pattern))
- {
- c
- for (size_t i = 1; i < match.size(); ++i)
- {
- cout << match[i] << endl;
- }
- }
- return 0;
- }
下面来详细解读:
(1)match.size(),返回一个模式的子表达式数量。模式中每个()里的部分,都代表正则表达式中的一个子表达式,模式本身也是一个子表达式,即如果模式中没有(),那么match.size()返回1,因为只本身一个子表达式。如果还有2对(),那么match.size(),应该返回3,因为又增加了2个子表达式。
(2)对于例,match.size()值是4,因为有三对(),每对()里面的部分都是一个子表达式。加上本身,一共有4个子表达式,所以match.size()的值是4.
(3)match[i],表示string匹配的子表达式的结果。可以直接和string对象比较。真是个奇怪的对象。