场景
1.正则表达式查询特定规则的字符串十分高效率, 有一些规则的字符串, 如果不用正则, 单是枚举+逻辑记录匹配的代码量就非常大.
2.比如查找一个小写字符串里连续相同的字母, 之后把它替换为 Xn(大写字母和重复字母个数)的方式进行加密. 正好正则表达式有专门的反向引用来解决查找重复字符的问题.
\1:表示的是引用第一次匹配到的()括起来的部分
例子
void TestBackreference()
{
std::string line = "trellis lLlama webbing dresser swagger";
std::regex pattern("(\\w)\\1+",std::regex_constants::icase);
std::smatch word_match;
while (std::regex_search(line, word_match, pattern)) {
std::cout << word_match.str() << '\n';
line = word_match.suffix();
}
}
输出
ll
lLl
bb
ss
gg
参考
regular-expression-language-quick-reference
backreference-constructs-in-regular-expressions
how-can-i-find-repeated-letters-with-a-perl-regex