TR1正则表达式:捕获组?

T. *_*ter 3 c++ regex visual-c++-2010

我正在使用TR1正则表达式(对于VS2010),我正在尝试做的是为名为"name"的组搜索特定模式,为名为"value"的组搜索另一种模式.我认为我想要的是一个捕获组,但我不确定这是否是正确的术语.我想将匹配分配给模式"[^:\ r \n] +):\ s"到名为"name"的匹配列表,并匹配模式"[^\r \n] +)\ r \n \n)+"到名为"value"的匹配列表.

到目前为止我的正则表达式是

string pattern = "((?<name>[^:\r\n]+):\s(?<value>[^\r\n]+)\r\n)+";
Run Code Online (Sandbox Code Playgroud)

但是程序运行时正则表达式T4R1标头不断抛出异常.我的模式的语法有什么问题?有人可以展示一个能够做我想要完成的事情的示例模式吗?

另外,如何在模式中包含一个匹配的子字符串,但实际上不包含结果中的子字符串?例如,我想匹配模式的所有字符串

"http://[[:alpha:]]\r\n"
Run Code Online (Sandbox Code Playgroud)

,但我不想在返回的匹配结果中包含子字符串"http://".

R. *_*des 7

C++ TR1和C++ 11正则表达式语法不支持命名捕获组.您必须执行未命名的捕获组.

此外,请确保您不会遇到转义问题.你必须两次转义一些字符:一个用于C++字符串,另一个用于正则表达式.该模式(([^:\r\n]+):\s\s([^\r\n]+)\r\n)+可以写为C++字符串文字,如下所示:

"([^:\\r\\n]+:\\s\\s([^\\r\\n]+)\\r\\n)+"
// or in C++11
R"xxx(([^:\r\n]+:\s\s([^\r\n]+)\r\n)+)xxx"
Run Code Online (Sandbox Code Playgroud)

也不支持Lookbehinds.您必须使用捕获组解决此限制:使用该模式(http://)([[:alpha:]]\r\n)并仅捕获第二个捕获组.