1

example string:

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

I want to be able to grab everything inside the curly braces using boost::regex, any help or guidance would be appreciated.

the string can contain {bobby|john|cindy} or {bobby||cindy} or {{bobby}} in which it'll be {bobby}. I'm trying to figure out the regex for that.

Thanks.

4

3 回答 3

2

此处描述了整体方法和代码示例。

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

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

除非字符串使用正确配对的非嵌套大括号,否则此正则表达式将根本不匹配。如果匹配,您可以使用regex_iterator在每个匹配项中处理每隔一个子组。

于 2012-07-03T21:36:58.800 回答
0

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

单花括号,相当简单。双重里面有什么……是龙。因为那时你会陷入这样的事情:“你{想要|这里}}做什么?” 提供给 Bison 的语法可以解决这个问题。我不确定一个简单的正则表达式可以。

于 2012-07-03T23:09:32.340 回答
-1

输入法有那么简单吗?只在大括号内获取子字符串?如果您的输入不能涵盖正则表达式的所有功能,您可以构建一个简单的循环来遍历字符串,保持它是否在花括号内的状态,然后处理您认为合适的字符串的这些字节。

于 2012-07-03T21:24:51.830 回答