如何在C ++中使用boost :: regex获取字符串?

时间:2012-07-03 21:15:19

标签: c++ regex boost boost-regex

示例字符串:

std::string sentence = "Hello {Bobby}, hows {Johns}?."

我希望能够使用boost :: regex抓住花括号内的所有内容,任何帮助或指导都将不胜感激。

该字符串可以包含{bobby | john | cindy}或{bobby || cindy}或{{bobby}},其中它将是{bobby}。我正试图找出正则表达式。

感谢。

3 个答案:

答案 0 :(得分:2)

整体方法和代码示例为described here

你需要的正则表达式似乎是:

([^{}]*\{([^{}]*)\})+

除非字符串使用正确配对的非嵌套大括号,否则此正则表达式将完全不匹配。如果匹配,则可以使用regex_iterator处理每个匹配中的每个第二个子组。

答案 1 :(得分:0)

根据您对David的回答的评论,您可能进入正则表达式无法直接解析的领域。像你用双括号描述的嵌套的东西让我觉得你可能需要一个实际的语法来解析。在这种情况下,您可以获得学习Bison的“乐趣”。如果它无法解析它,你需要一些 way 更具体的东西。

单支撑,相当简单。什么是双重内容...龙是龙。因为那时你会遇到这样的事情:“你{想要|这里}}是什么?”提供给Bison的语法可以解决这个问题。我不确定一个简单的正则表达式。

答案 2 :(得分:-1)

输入那么简单吗?只有在括号内获得子串?如果你的输入不能覆盖正则表达式的所有功能,你可以构建一个简单的循环来检查sting,保持它是否在大括号内的状态,然后处理字符串中你认为合适的那些字节。 / p>