使用regex在C ++中提取匹配的字符串

时间:2013-08-02 11:09:21

标签: c++ regex string

我有以下测试字符串。

#5=BUILDING('xxxcdccx',#5,$,$,$,#21,$,$,.ELEMENT.,$,$,$);
#6=BUILDING('xxxcdccx',#5,$,$,$,#21,$,$,.ELEMENT.,$,$,$);
#7=BUILDING('xxxcdccx',#5,$,$,$,#21,$,$,.ELEMENT.,$,$,$);

我需要提取:

  • “#integer”(始终从字符串的开头开始)来自上面的字符串并将其存储在变量中。
  • 来自测试字符串的“(”和“)”之间的字符串。

有人可以建议我如何使用正则表达式在C ++中实现这一目标。

我尝试了以下简单示例(它是一次处理一行的循环):

std::regex e ("\#[:d:]+");
if (std::regex_match(sLine,e)){
   //store it and process it
}
输出应该是:

#5

and

'xxxcdccx',#5,$,$,$,#21,$,$,.ELEMENT.,$,$,$ ?? (not sure)

1 个答案:

答案 0 :(得分:1)

描述

此表达式将:

  • 捕获初始#和整数
  • 捕获括号之间的值

^(\#\d+).*?\(([^)]*)\)

enter image description here

实施例

Live Demo

示例文字

#5=BUILDING('xxxcdccx',#5,$,$,$,#21,$,$,.ELEMENT.,$,$,$);
#6=BUILDING('xxxcdccx',#5,$,$,$,#21,$,$,.ELEMENT.,$,$,$);
#7=BUILDING('xxxcdccx',#5,$,$,$,#21,$,$,.ELEMENT.,$,$,$);

捕获论坛

组0获取整个匹配的字符串
第1组获得#和整数
第2组得到括号之间的值

[0][0] = #5=BUILDING('xxxcdccx',#5,$,$,$,#21,$,$,.ELEMENT.,$,$,$)
[0][1] = #5
[0][2] = 'xxxcdccx',#5,$,$,$,#21,$,$,.ELEMENT.,$,$,$

[1][0] = #6=BUILDING('xxxcdccx',#5,$,$,$,#21,$,$,.ELEMENT.,$,$,$)
[1][1] = #6
[1][2] = 'xxxcdccx',#5,$,$,$,#21,$,$,.ELEMENT.,$,$,$

[2][0] = #7=BUILDING('xxxcdccx',#5,$,$,$,#21,$,$,.ELEMENT.,$,$,$)
[2][1] = #7
[2][2] = 'xxxcdccx',#5,$,$,$,#21,$,$,.ELEMENT.,$,$,$