正则表达式¶
正则表达式在<regex>中定义,是一种强大的处理字符串的库。C++中morning的语法是ECMAScript。
语法¶
正则表达式中的任何字符都表示匹配自身,但以下特殊字符除外:
如果要匹配这些字符,则需要加上\转义字符。下面讲解这些特殊字符的含义:
-
锚点
^ 和 $ 被称为锚点,它们分别表示字符串的开始和结束。
-
通配符
. 可以匹配除了换行符之外的任意单个字符。
-
替代
| 表示或,即匹配 | 左或右的字符。
-
分组
() 被称为捕获组,表示匹配的模式。
-
重复
以下4个字符表示可重复匹配:
- *:匹配零次或多次之前的部分。
- +:匹配一次或多次之前的部分。
- ?:匹配零次或一次之前的部分。
- {n,m}:匹配n至m次之前的部分。
重复匹配字符默认位贪婪匹配,即尽可能多地匹配字符。在字符后面加上 ?,可以改为非贪婪模式。
-
优先级
元素:例如a,是正则表达式最基本的构建块 量词:例如+、*、?、{n,m},与左侧的元素紧密绑定 串联:例如ab+c,在量词之后绑定 替代符:例如|,最后绑定
-
字符集合
为了一次性匹配多个字符,一种方法是使用[c1c2c3...cn]的形式,表示匹配方括号内的任意字符。如果第一个字符是^,则表示匹配除了这些字符之外的任意字符:
- [^abc]:匹配除了a、b、c之外的所有字符。
- [a-z]:匹配所有小写字母
还有一种方法是使用字符类,这里只列举用得比较多的,比如\d+,表示匹配一个或多个数字,