直接在C ++表达式中使用正则表达式捕获
我试图直接在正则表达式中使用捕获的组。 但是,当我尝试这样做时,程序无限期地挂起。
例如:
string input = "<Tag>blahblah</Tag>";
regex r1("<([a-zA-Z]+)>[a-z]+</1>");
string result = regex_replace(result, regex, "");
如果我添加另一个斜杠到捕获"<([a-zA-Z]+)>[az]</1>"
,程序编译但会抛出一个“regex_error(regex_constants :: error_backref)”异常。
笔记:
编译器:Apple LLVM 5.1
我将此作为从文本块中清除垃圾的过程的一部分。 该文档不一定是HTML / XML,所需的文本并不总是在标签内。 所以如果可能的话,我希望能够用正则表达式来做到这一点,而不是解析器。
字符串文字中的反斜杠字符是一个转义字符。
或者转义"<([a-zA-Z]+)>[az]+</1>"
或使用原始文字, R"(<([a-zA-Z]+)>[az]+</1>)"
有了这个,你的程序就可以像你期望的那样工作:
#include <regex>
#include <iostream>
int main()
{
std::string input = "Hello<Tag>blahblah</Tag> World";
std::regex r1("<([a-zA-Z]+)>[a-z]+</1>");
std::string result = regex_replace(input, r1, "");
std::cout << "The result is '" << result << "'n";
}
演示:http://coliru.stacked-crooked.com/a/ae20b09d46f975e9
你用1
得到的异常表明你的编译器被配置为使用GNU libstdc ++,其中regex没有实现。 查找如何设置它以使用LLVM libc ++或使用boost.regex。