字符组
普通字符组
字符组是正则表达式最基本的结构之一。
字符组就是一组“字符”,在正则表达式当中,它表示在同一个位置可能出现的字符。
写法:在[]中列出可能出现的值。
字符组中的字符排列顺序并不影响字符组的功能。
字符组中出现重复的字符也不会影响字符组的功能。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <iostream> #include <regex> using namespace std; int main() { string str_regex("[0123456789]"s); string str_test("2"); regex re(str_regex); auto result = regex_match(str_test,re); if(result) cout << "ok" << endl; else cout << "failed" << endl; return 0; } |
上述代码中,使用了C++的regex库里面的方法,接下来的实例,皆类似此处:
解析:
上述str_regex里面双引号的内容,就是一个正则表达式,它给定一个用来匹配的范围,让str_test来匹配,只要str_test与这个范围内的其中一个匹配成功了,就会得到一个MatchObject对象,在上述代码示例中,只要匹配成功,result的值就是true,否则,为false。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <iostream> #include <regex> using namespace std; int main() { string str_regex("^[0123456789]$"s); string str_test("2"); regex re(str_regex); auto result = regex_match(str_test,re); if(result) cout << "ok" << endl; else cout << "failed" << endl; return 0; } |
解析:
上述代码与上面的代码区别在于,正则表达式里面多了^和$。
^的意思是定位到字符串起始的位置。
$的意思是定位到字符串的结束位置。
作用:拿str_test的完整字符串内容去str_regex里面匹配
范围表示法:
1 2 |
[0123456789] [0-9] |
在字符组中可以并列多个范围表示法的内容,如下:
1 |
[0-9a-zA-Z]//可以匹配数字,大小写字母 |
元字符与转义
比如上面的正则表达式里面的-,它用来表示范围,不能用来匹配,它是一个元字符。
使用反斜杠\来对含有特殊含义的元字符来转义。
注意:正则表达式中的每个反斜杠,在代码中必须转义为\\
有的语言,有保持字符串原生内容的语法,比如C++:
1 2 3 4 |
//以前的语法 string str0(R"(tes\t)"); //C++14语法 string str1("tes\t"s); |
另外,需要注意的是,[]中括号,如果需要作为匹配内容的话,只需要转义[,不需要转义]。
排除型字符组
类似普通字符组
在[后面跟着一个^
1 2 |
[0-9]//匹配0到9的数字 [^0-9]//匹配除了0到9的其他字符 |
字符简记法
简记 | 正则表达式 |
\d | [0-9] |
\w | [0-9a-zA-Z] |
\s | [\t\v\n\r\f] |
\D | 匹配\d不能匹配的字符 |
\W | 匹配\w不能匹配的字符 |
\S | 匹配\s不能匹配的字符 |
POSIX字符组
需要在Linux下的各种工具中使用正则表达式,则需要用到POSIX字符组
字符组 | 说明 | ASCII字符组 | 等价PCRE简记 |
[:alnum:] | 字母和数字 | [a-zA-Z0-9] | |
[:alpha:] | 字母 | [a-zA-Z] | |
[:ASCII:] | ASCII字符 | [\x00-\x7F] | |
[:blank:] | 空格字符和制表符 | [ \t] | |
[:cntrl:] | 控制字符 | [\x00-\x1F\x7F] | |
[:digit:] | 数字字符 | [0-9] | \d |
[:graph:] | 空白字符之外的字符 | [\x21-\x7E] | |
[:lower:] | 小写字母 | [a-z] | |
[:print:] | 类似graph,但包括空白字符 | [\20-\x7E] | |
[:punct:] | 标点符号 | [][!"#$%&'()*+,./:;<=>?@\^_`{|}~-] | |
[:space:] | 空白字符 | [ \t\r\v\n\f] | \s |
[:upper:] | 大写字母 | [A-Z] | |
[:word:] | 字母字符 | [0-9a-zA-Z] | \w |
[:xdigit:] | 十六进制字符 | [0-9a-fA-F] |
本文为原创文章,版权归Aet所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 正则表达式_匹配模式02/24
- ♥ 正则表达式 _ 括号01/17
- ♥ 正则表达式 _ 断言01/17
- ♥ HelloWorld项目是怎么运行起来的10/02
- ♥ Lua_调用 C++程序里的函数,给Lua调用10/01
- ♥ CMD应用记述二07/07