Regex_iterator方法需要输入一个正则表达式,以及一个用于替换匹配的字符串的格式化字符串;这个格式化的字符串可以通过表的转义序列引用匹配子字符串的部分内容;
转义序列 |
|
$n |
替换第n个捕获的字符串,$1表示第一个捕获组,$2表示第二个捕获组 |
$& |
匹配整个正则表达式的字符串,等于$0 |
$’ |
在输入字符串中,在匹配正则表达式的字符串左侧部分 |
$` |
在输入字符串中,在匹配正则表达式的字符串右侧部分 |
$$ |
美元 |
原型:std::string regex_replace(inputSequence,Regex,FormateString,[, Flags]);
inputSequence可以是C风格的字符串,
Regex是正则表达式
FormateString是需要替换掉匹配的子字符串的格式化字符串;
Flags是可选参数
在第四个参数可以为以下;
Flag(标志) |
Expressions(说明) |
Format_default |
默认是替换模式的所有实例,并将所有不匹配的内容复制到结果中; |
Format_no_copy |
默认是替换模式的所有实例,并将所有不匹配的内容不复制到结果中; |
Formate_first_only |
只替换模式里的第一个实例 |
在没有第四个参数的时候(也就是第四个参数默认的)实例:
std::regex r("<hl>(.*)</hl><pl>(.*)</pl>"); const std::string formate = "H1 = $1 and P1 = $2"; std::string str; while(true) { if(!std::getline(std::cin,str) || str == "q") { break; }else { std::string result = std::regex_replace(str,r,formate); std::cout << result << std::endl; } }
输入:
<body><hl>Header</hl><pl>Some text</pl></body>
输出:
<body>H1 = Header and P1 = Some text</body>
当我们写入第四个参数的时候:
std::regex r("<hl>(.*)</hl><pl>(.*)</pl>"); const std::string formate = "H1 = $1 and P1 = $2"; std::string str; while(true) { if(!std::getline(std::cin,str) || str == "q") { break; }else { std::string result = std::regex_replace(str,r,formate,std::regex_constants::format_no_copy); std::cout << result << std::endl; } } return 0;
输入:
<body><hl>Header</hl><pl>Some text</pl></body>
输出:
H1 = Header and P1 = Some text
这就是两者的差别;