****************************************************************************************************
正则表达式语法
============================================================================================
特殊含义的字符
.
[] :字符集
{} :计数
() :子模式
*
+
?
|
^
$
===========================================================================================
字符集
d :一个十进制数字
l :一个小写字母
s :一 个空白符(空格符,制表符等)
u :一个大写字母
w :一个字母(a~z或A~Z)或数字(0~9)或下划线(_)
D :除了d之外的字符
L :除了l之外的字符
S :除了s之外的字符
U :除了u之外的字符
W :除了w之外的字符
===========================================================================================
重复
{n}
{n,} :重复n次或更多次
{n,m}:重复至少n次,至多m次
*
+
?
===========================================================================================
子模式
(d*:)?(d+):它表示字符串前半部分可以为空,若非空,则是任意长度的数字后接一个冒号,后半部分是一个或多个数字的序列。
===========================================================================================
可选项
Subject:(FW:| Re:):表示匹配Subject:Fw:或者是Subject:Re:
===========================================================================================
正则表达式错误
===========================================================================================
下面是一个常用的套路,比较稳~~~
注意一点,编译的时候要指定链接:g++ -Wall -lboost_regex test.cpp -o chen
*****************************************************************************************************
正则表达式方法
=====================================================================================================
(1) regex_match : 确定一行字符串是否和指定的正则表达式完全匹配
-----------------------------------------------------------------------
// 检查模式是否匹配
结果为:
w+s*((w+,d+)s*)*
chen (chen,0) (huan,1) (jiang,2) is matched
chen(chen,0)(huan,1)(jiang,2) is matched
chen is matched
--------------------------------------------------------------------------
// regex_match不仅验证是否匹配,而且可以从中提取出正则表达式括号对应的子串
结果为:
w+s*(((w+,d+)s*)*)
chen (chen,0) (huan,1) (jiang,2)
(chen,0) (huan,1) (jiang,2)
(jiang,2)
注意,这个的regex表达式和上面的不同,将后面的子串((w+,d+)s*)*通过括号合并成一个完整的子串。
=====================================================================================================
(2) regex_search:regex_match是验证是否完全匹配,而regex_search是从一大串string中找出匹配的一小段字符串
---------------------------------------------------------------
结果为:
1234
可以看出,regex_search是匹配到字符串中第一个符合条件的模式便会返回。
-------------------------------------------------------------
结果是:
d+
1234
12345
1234567
****************************************************************************************************
(3) 关于regex::smatch类型
Expression: (ftp|http|https)://((w+.)*(w*))/([wd]+/{0,1})+ String: http://www.foo.com/bar matches[0] = http://www.foo.com/bar matches[1] = http matches[2] = www.foo.com matches[3] = foo. matches[4] = com matches[5] = bar