RE2是 Google 提供的现代正则表达式引擎。我想在当前使用 gnuregex 的程序中使用 RE2。我遇到的问题与找出匹配的内容有关。RE2 返回的是匹配的字符串。我需要知道匹配的偏移量。我目前的计划是获取 RE2 返回的内容,然后find
在 C++ 字符串上使用 a 。但这似乎很浪费。我已经阅读了 RE2 手册,但不知道该怎么做。有任何想法吗?
问问题
2559 次
1 回答
11
将结果存储在 are2::StringPiece
而不是 a 中std::string
。的值.data()
将指向原始字符串。
考虑这个程序。在每个测试中,result.data()
是指向原始const char*
or的指针std::string
。
#include <re2/re2.h>
#include <iostream>
int main(void) {
{ // Try it once with character pointers
const char *text[] = { "Once", "in", "Persia", "reigned", "a", "king" };
for(int i = 0; i < 6; i++) {
re2::StringPiece result;
if(RE2::PartialMatch(text[i], "([aeiou])", &result))
std::cout << "First lower-case vowel at " << result.data() - text[i] << "\n";
else
std::cout << "No lower-case vowel\n";
}
}
{ // Try it once with std::string
std::string text[] = { "While", "I", "pondered,", "weak", "and", "weary" };
for(int i = 0; i < 6; i++) {
re2::StringPiece result;
if(RE2::PartialMatch(text[i], "([aeiou])", &result))
std::cout << "First lower-case vowel at " << result.data() - text[i].data() << "\n";
else
std::cout << "No lower-case vowel\n";
}
}
}
于 2012-08-12T09:20:00.993 回答