gpt4 book ai didi

c++ - 匹配数学表达式的正则表达式

转载 作者:行者123 更新时间:2023-11-28 03:28:48 25 4
gpt4 key购买 nike

我有一个正则表达式,我打算用它来“标记化”一个数学表达式,例如:

a + b + 1 + 2

int main() {
string rxstrIdentifier = "\\b[a-zA-Z]\\w*\\b";
string rxstrConstant = "\\b\\d+\\b";
string rxstrRef = "(" + rxstrIdentifier + ")|(" + rxstrConstant + ")"; // identifier or constant

const regex rxExpr = regex("^(" + rxstrRef + ")(.*)$"); // {x} [{+} {y}]*
//const regex rxSubExpr = regex("^\\s*([+])\\s*(" + rxstrRef + ")(.*)$"); // {+} {x} [...]

string test = "b + a + 1";
cmatch res;
regex_search(test.c_str(), res, rxExpr);
cout << "operand: " << res[1] << endl;
cout << "res: " << res[2] << endl;

system("pause");
return 0;
}

问题是操作数,res 在示例中只给出了 b。我以为

operand: b
res: + a + 1

用于在另一个类似的正则表达式中工作......

const regex Parser::rxExpr = regex("^(\\w+)((\\s*([+])\\s*(\\w+))*)$"); // {x} [{+} {y}]*
const regex Parser::rxSubExpr = regex("^\\s*([+])\\s*(\\w+)(.*)$"); // {+} {x} [...]

最佳答案

您的正则表达式似乎不允许在字符串中使用空格。 \b 匹配单词边界,但边界的宽度为零,因此不会占用标记之间的空格。

关于c++ - 匹配数学表达式的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13178651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com