我正在使用TR1正则表达式 (对于VS2010),我试图为一个名为"name“的组搜索特定的模式,为一个名为"value”的组搜索另一个模式。我想我想要的是一个捕获组,但我不确定这是否是正确的术语。我希望将匹配分配到模式"^:\r\n+):\s“到名为"name”的匹配列表,并将模式“^\r\n+)\r\n+”的匹配分配到称为“值”的匹配列表。
到目前为止,我所掌握的正则表达式是
string pattern = "((?<name>[^:\r\n]+):\s(?<value>[^\r\n]+)\r\n)+";但是regex T4R1头在程序运行时总是抛出异常。我的模式的语法有什么问题?有人能给我举个例子,做我想要完成的事情吗?
此外,如何能够在模式中包含一个子字符串以进行匹配,但实际上却不将该子字符串包含在结果中?例如,我希望匹配模式的所有字符串。
"http://[[:alpha:]]\r\n",但我不希望在返回的匹配结果中包含子字符串"http://“”。
发布于 2011-06-18 20:18:16
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"后面的查找也不支持。您必须通过使用捕获组来解决这个限制:使用模式(http://)([[:alpha:]]\r\n),只抓取第二个捕获组。
https://stackoverflow.com/questions/6398278
复制相似问题