TR1正则表达式:捕获组

TR1 regex: capture groups?

本文关键字:正则表达式 TR1      更新时间:2023-10-16

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

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

string pattern = "((?<name>[^:rn]+):s(?<value>[^rn]+)rn)+";

但是regex T4R1标头在程序运行时不断抛出异常。我的模式语法有什么问题?有人能展示一个能实现我想要实现的目标的示例模式吗?

此外,如何可能在要匹配的模式中包含子字符串,而不在结果中实际包含该子字符串?例如,我想匹配模式的所有字符串

"http://[[:alpha:]]rn"

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

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

此外,确保你不会遇到逃避问题。您将不得不对某些字符进行两次转义:一次用于C++字符串,另一次用于正则表达式。模式(([^:rn]+):ss([^rn]+)rn)+可以写成这样的C++字符串文字:

"([^:\r\n]+:\s\s([^\r\n]+)\r\n)+"
// or in C++11
R"xxx(([^:rn]+:ss([^rn]+)rn)+)xxx"

Lookbehinds也不受支持。您必须通过使用捕获组来绕过这个限制:使用模式(http://)([[:alpha:]]rn),只捕获第二个捕获组。