【发布时间】:2018-03-04 11:51:31
【问题描述】:
我们有 C++ 中的 regex 库。通过使用它,我想 parse tokenize 下面的数学表达式。
(bar+3)*foo/3+-1
作为
(
bar
+
3
)
*
foo
/
3
+
-1
为此,我尝试了那个,但它没有提供与预期相反的输出,而不是标记
std::string s ("(bar+3)*foo/3+-1");
std::smatch m;
std::regex e ("^[-+(]*[[:digit:]]+[)]*([-+*/][-+(]*[[:digit:]]+[)]*)*$");
怎么做?
编辑:抱歉写错了。
【问题讨论】:
-
定义“不起作用” - 会发生什么?遇到什么错误,调试时看到什么等?
-
固定@UnholySheep
-
上面的正则表达式显然是错误的,因为它不匹配任何字母字符,但您的目标字符串包含字母字符。
-
正则表达式无法解析递归语言。数学表达式是递归语言。所以我认为你可能选择了错误的工具来完成这项工作。
-
@snr 困难的部分是您希望
-成为整数的一部分,但您可能也希望它成为运算符-1+-x,第一个减号是整数,但第二个是一元减号。如果您准备放弃该要求(并始终将-视为操作员),那将会更容易。