0

我想要匹配和捕获表达式的运算符和操作数,例如:

  • 1
  • X
  • 1 + x
  • x + y + 3 + 10
  • ETC...

所以在正则表达式中,

(\w+)(\s*([+])\s*(\w+))*

似乎可以做到,但我如何获得匹配的捕获?注意 [+] 和 (\w+) 已经在 1 个捕获中。

4

3 回答 3

2

不幸的是,这是不可能的(至少在我所知道的任何正则表达式中)。如果多次使用一个捕获组,则捕获将始终填充最后捕获的内容。简单的例子:([a-z])*应用于abc只会给你c

我建议您使用正则表达式来检查有效格式。然后你可以在匹配的地方拆分字符串\s*\b\s*。对于最后一个示例,这应该会生成一个包含x, +, y, +, 3,的数组。+10

下面是一些示例代码,展示了如何使用正则表达式来拆分字符串,使用boost::regex.

于 2012-10-29T10:29:52.123 回答
0

也许这对于System.CodeDom.Compiler来说会比 Regexes 更好。

于 2012-10-29T10:38:27.353 回答
0

如果boost是您的一个选项,那么您可以使用boost::regexwith boost::match_extraflag,然后match_results::captures包含sub_match::captures所有捕获项目的列表

于 2012-10-29T11:42:29.070 回答