参考:
正则表达式(Regular Expression) — Chuanqi 的技术文档
" | \" |
\ | \\ |
. | \. |
汉字 | [\p{Han}] |
一、函数细节
1. GlobalReplace()
RE2::GlobalReplace(str, pat, new_sub_str ):将句子str中匹配到的子串替换为new_sub_str
std::string aInput = "~/Test (Folder)/";
RE2::GlobalReplace( &aInput, "(<|>|\\||\\:|\\(|\\)|&|;|\\s)", "\\\\0" );
~/Test\ \(Folder\)/
替换为
~/Test\0\0Folder\0
2. PartialMatch()
RE2::PartialMatch("hello:1234", pattern, &s, &i):将匹配的组内容放到s、i中
RE2 pattern("(\\w+):(\\d+)", RE2::Quiet);
assert(RE2::PartialMatch("hello:1234", pattern, &s, &i)); // 成功匹配
#include <re2/re2.h>
#include <iostream>
#include <assert.h>
int
main(void)
{
int i;
std::string s;
assert(RE2::FullMatch("ruby:1234", "(\\w+):(\\d+)", &s, &i));
assert(s == "ruby");
assert(i == 1234);
// Fails: "ruby" cannot be parsed as an integer.
assert(!RE2::FullMatch("ruby", "(.+)", &i));
// Success; does not extract the number.
assert(RE2::FullMatch("ruby:1234", "(\\w+):(\\d+)", &s));
// Success; skips NULL argument.
assert(RE2::FullMatch("ruby:1234", "(\\w+):(\\d+)", (void*)NULL, &i));
// Fails: integer overflow keeps value from being stored in i.
assert(!RE2::FullMatch("ruby:123456789123", "(\\w+):(\\d+)", &s, &i));
std::cout << "Ok" << std::endl;
return 0;
}
3. re2::StringPiece
RE2返回的是匹配的字符串,如果需要知道匹配的偏移量,则将结果存储在re2::StringPiece
而不是std::string
中, .data()
的值将指向原始字符串。
考虑这个程序。
在每个测试中,result.data()
是指向原始const char*
或std::string
的指针。
二、Options设置
set_one_line (1):"^$"开关可用
三、正则语法细节
配置文件:
(?P<test>电话) (:|:|是) (?:[0-9]+)
匹配获取 匹配不获取
(?P<test>电话)(:|:|是)(?:[0-9]+) test
[0-9]+ num
测试:电话是120
匹配结果:电话—test,120—num。匹配不获取影响后面num