/正则表达式:
第一讲 字符:
"普通字符" : 大部分的字符 包括字母和数字 他们只能匹配他们自己
"元字符" : 他们可以匹配其他字符
元字符:
点元字符 "." : 他表示他可以匹配任意字符
• c.t 可以匹配cat, cot, cit, 甚至可以匹配 c.t ;但不可以匹配换行符
反斜杠元字符 "\" : 他可以忽略元字符 使得元字符可以和普通字符一样
• c\.t 表示 匹配 c.t ; c\\t 表示匹配 c\t ;
第二讲 字符类:
字符类 : 是一组在方括号内的字符, 表示可以匹配其中的任何一个字符;
例如 c[abc]d 表示匹配 cad 或 cbd 或 ccd 三种字符串
字符类的范围 : 可以通过短横线表示匹配字母或数字的范围;
• [b-f] 等价于 [bcdef] , [A-Z] 等价于[ABC...XYZ] , [1-4] 等价于 [1234]
• [0-9.,]表明匹配一个数字,或者一个全角句号,或者一个逗号
• [0-9a-fA-F]意味着匹配一个十六进制数
• [a-zA-Z0-9\-]意味着匹配一个字母、数字或者一个短横线
注意 不要使用z-A 因为他们之间是有字符存在的 [1-31]代表的是匹配1或者2或者3
第三讲 字符类的反义:
反义字符: "^" 只可以放在字符类的起始位置 [5^1] 是非法的
• [^a]表示匹配任何不是“a”的字符
• [^a-zA-Z0-9]表示匹配任何不是字母也不是数字的字符
• [\^abc]匹配一个为“^”或者a或者b或者c的字符
• [^\^]表示匹配任何不为“^”的字符
第四讲 转义字符类:
转义字符: "\d" 等价于 [0-9] "\D" 等价于 [^0-9]
转义字符: "\w" 等价于 [0-9a-zA-Z] "\W" 等价于 [^0-9a-zA-Z]
转义字符: "\s" 匹配 空格, 制表符, 回车, 换行 "\S" 匹配一个非空字符
转义字符: "?" 表示 {0,1} 例如colou?r 表示匹配 colour 或 color
转义字符: "*" 表示 {0, } 例如 .* 表示匹配任意内容
转义字符: "+" 表示 {1, } 例如 \w+ 表示匹配任意由字母数字组成的串
第五讲 重复:
在字符或者字符集之后 可以使用大括号{}表示重复
• a{1} 等价于 a
• a{3} 等价于 aaa
• a{0} 表示匹配空字符串。从这个正则表达式本身来看,它毫无意义。
如果你对任何文本执行这样的正则表达式,你可以定位到搜索的起始位置,即使文本为空。
• a\{2\}表示匹配字符串 “a{2}”
• 在字符类中,大括号没有特殊含义。[{}]表示匹配一个左边的大括号,或者一个右边的大括号
重复范围: 这样的表达式优先匹配最长字符
• x{4,4}与x{4}相同
• colou{0,1}r表示匹配colour或者color
• a{3,5}表示匹配aaaaa或者aaaa或者aaa
• a {1,}表示匹配一个或一个以上的连续字符a
• .{0,}表示匹配任意内容
第六讲 匹配
非贪婪匹配:
".*" 表示匹配双引号 然后是任意长度任意字符 然后是双引号 但是其中可能包括双引号
所以在结尾加上一个 "?" 表示不在匹配最长串 ".*"? 表示匹配双引号 最短串 双引号;
选择匹配:
cat|dot 表示匹配 cat 或者 dot
第七讲 分组
• (red|blue) 表示匹配red或者blue或者是一个空字符串
• abc()def 等价于 abcdef
• (red|blue)? 等价于 (red|blue|)
• \w+(\s+\w+)表示匹配一个或多个由空格分隔的单词
第八讲 分隔符
分隔符 "\b" 表示匹配一个单词分隔符 在单词和非单词之间有单词分隔符 文本的开头和结尾通常也有
//使用方法:
#include <regex>
#include <iostream>
#include <string>
bool is_phone_number_valid( const std::string& phone_number )
{
const std::regex pattern( "15\\d{9}" ); // 对于转义字符 \d代表[0-9] 第一个\代表程序的转义 第二个代表正则的转义
return std::regex_match( phone_number, pattern ); // 如果要匹配phone_number4 则应写 15d{9}
}
int main()
{
std::string phone_number1 = "1234567890";
std::string phone_number2 = "15030659529";
std::string phone_number3 = "45618asd59s";
std::string phone_number4 = "15ddddddddd";
std::cout << phone_number1 << " : " << ( is_phone_number_valid( phone_number1 ) ? "valid" : "invalid" ) << std::endl;
std::cout << phone_number2 << " : " << ( is_phone_number_valid( phone_number2 ) ? "valid" : "invalid" ) << std::endl;
std::cout << phone_number3 << " : " << ( is_phone_number_valid( phone_number3 ) ? "valid" : "invalid" ) << std::endl;
std::cout << phone_number4 << " : " << ( is_phone_number_valid( phone_number4 ) ? "valid" : "invalid" ) << std::endl;
return 0;
}