我想要匹配和捕获表达式的运算符和操作数,例如:
- 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::regex
with boost::match_extra
flag,然后match_results::captures
包含sub_match::captures
所有捕获项目的列表