首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TR1 regex:捕获组?

TR1 regex:捕获组?
EN

Stack Overflow用户
提问于 2011-06-18 19:11:31
回答 1查看 2.4K关注 0票数 3

我正在使用TR1正则表达式 (对于VS2010),我试图为一个名为"name“的组搜索特定的模式,为一个名为"value”的组搜索另一个模式。我想我想要的是一个捕获组,但我不确定这是否是正确的术语。我希望将匹配分配到模式"^:\r\n+):\s“到名为"name”的匹配列表,并将模式“^\r\n+)\r\n+”的匹配分配到称为“值”的匹配列表。

到目前为止,我所掌握的正则表达式是

代码语言:javascript
复制
string pattern = "((?<name>[^:\r\n]+):\s(?<value>[^\r\n]+)\r\n)+";

但是regex T4R1头在程序运行时总是抛出异常。我的模式的语法有什么问题?有人能给我举个例子,做我想要完成的事情吗?

此外,如何能够在模式中包含一个子字符串以进行匹配,但实际上却不将该子字符串包含在结果中?例如,我希望匹配模式的所有字符串。

代码语言:javascript
复制
"http://[[:alpha:]]\r\n"

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-18 20:18:16

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

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

代码语言:javascript
复制
"([^:\\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),只抓取第二个捕获组。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6398278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档