参考:正则表达式(Regular Expression) — Chuanqi 的技术文档
" | \" |
\ | \\ |
. | \. |
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
的指针。
set_literal (3)
set_posix_syntax (3)
set_perl_classes (3)
set_log_errors (3)
set_case_sensitive (3):大小写
Copy (2)
set_word_boundary (2)
set_never_nl (2)
set_max_mem (2)
set_one_line (1):"^$"开关可用