我想要匹配和捕获表达式的运算符和操作数,例如:
- 1
- X
- 1 + x
- x + y + 3 + 10
- ETC...
所以在正则表达式中,
(\w+)(\s*([+])\s*(\w+))*
似乎可以做到,但我如何获得匹配的捕获?注意 [+] 和 (\w+) 已经在 1 个捕获中。
我想要匹配和捕获表达式的运算符和操作数,例如:
所以在正则表达式中,
(\w+)(\s*([+])\s*(\w+))*
似乎可以做到,但我如何获得匹配的捕获?注意 [+] 和 (\w+) 已经在 1 个捕获中。
不幸的是,这是不可能的(至少在我所知道的任何正则表达式中)。如果多次使用一个捕获组,则捕获将始终填充最后捕获的内容。简单的例子:([a-z])*应用于abc只会给你c。
我建议您使用正则表达式来检查有效格式。然后你可以在匹配的地方拆分字符串\s*\b\s*。对于最后一个示例,这应该会生成一个包含x, +, y, +, 3,的数组。+10
下面是一些示例代码,展示了如何使用正则表达式来拆分字符串,使用boost::regex.
也许这对于System.CodeDom.Compiler来说会比 Regexes 更好。
如果boost是您的一个选项,那么您可以使用boost::regexwith boost::match_extraflag,然后match_results::captures包含sub_match::captures所有捕获项目的列表