C ++中的正则表达式抛出错误"无效的特殊开括号。"

时间:2017-05-22 17:29:04

标签: c++ regex pcre

我目前正在处理这样的查询:

a.b.c.d.e〜F

我试图提取a,b,c,d,e和f。

我在提取句点分隔值方面取得了一些进展,但我仍然陷入困境,因为好像我用于提取最后一个元素的特殊查询(由波浪号&#34;〜&#34; )使用PCRE (?<=~).*,因为它在运行时失败。

我得到一个非常独特的错误(至少根据谷歌),这是&#34;

terminate called after throwing an instance of 'std::regex_error'
  what():  Invalid special open parenthesis.
Aborted (core dumped)

这是我的代码:

#include <string>
#include <iostream>
#include <regex>
using namespace std;

int main() {  
  const string example = "a.b.c~height";

  regex regex_query_path(R"rgx([^.]+(?=[^~]*~))rgx");

  std::smatch m;
  string test = example;
  while (std::regex_search (test,m,regex_query_path)) {
    cout << "path: " << m[0] << endl;
    test = m.suffix().str();
  }

  regex regex_query_name(R"rgx((?<=~).*)rgx");

  test = example;
  while (std::regex_search (test,m,regex_query_name)) {
    cout << "query: " << m[0] << endl;
    test = m.suffix().str();
  }
  return 0;
}

我在Ubuntu 16.08上用g ++ -std = c ++ 14和gcc 6.2.0版编译它。

任何帮助都将非常感激。谢谢!

1 个答案:

答案 0 :(得分:1)

如果要使用括号,则需要使用反斜杠转义它们。这是一个例子

std::string regexstring = "\\([a-z]\\):\\([0-9]\\)";