c++ - 使用正则表达式在 C++ 中提取匹配的字符串

标签 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)

最佳答案

描述

这个表达式将:

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

^(\#\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 组获得 # 和整数
Group 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.,$,$,$

关于c++ - 使用正则表达式在 C++ 中提取匹配的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18015413/

相关文章:

c++ - 为什么我必须在 Microsoft Visual Studio C++ 应用程序中#include "stdafx.h"?

c++ - 与 fmod() 结果比较返回 false

c++ - 如何修复基于 cpp 的具有 2 种不同大小的 C++ 结构?

javascript - 从字符串中匹配和提取信息的特定模式

regex - 连接两个字符串,以便合并它们的公共(public)后缀和前缀

java - 字符串(drawString)仅在滚动时消失(JAVA)

JavaScript:字符串相等但比较返回 false

c++ - 用 LAME 编码的 MP3 的长度

javascript - 正则表达式不允许在字符串开始或结束处出现 '.' 、 '_' 、 '-' ,并且不应有连续的 '.' ,其余所有特殊字符都不应被允许

string - 逐行分析由推文组成的 .txt 文件