c++ - 正则表达式帮助,匹配产生额外的空格

标签 c++ regex boost

我正在使用 boost/regex.hpp 库。正则表达式旨在匹配 float 或任意数学运算符列表之一。尾随的 a 是一个占位符,因为构建正则表达式的当前代码在末尾留下了 |,我还没有修复它。我的正则表达式是:

(?:([-+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?)|(\s*sqrt\((.+?)\)\s*)|(\s*exp\((.+?)\)\s*)|(\^)|(\s*log2\((.+?)\)\s*)|(\s*log10\((.+?)\)\s*)|(\s*neg\((.+?)\)\s*)|(\s*floor\((.+?)\)\s*)|(\s*log\((.+?)\)\s*)|(\s*fact\((.+?)\)\s*)|(/)|([*])|([+])|([-])|a)

我的测试字符串是:

4.5 + 9.6e8 + sqrt(5)

结果匹配是:

4.5                                          +  9.6e8                                          +    sqrt(5) 5                    

我不确定为什么捕获之间有这么多空格。

打印代码为

boost::regex reg(token);
boost::smatch m;
string s = input;
while (boost::regex_search(s, m, reg)) {
    for (int i = 1; i < m.size(); ++i) cout << m[i] << " ";
    s = m.suffix().str();
}

最佳答案

您有很多捕获括号,并且在每个捕获组之间打印一个空格。您的许多捕获组都是空的。也许您想重构您的正则表达式以仅捕获您真正想要的内容。

关于c++ - 正则表达式帮助,匹配产生额外的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28803318/

相关文章:

c++ - Qt:带有文本浏览器的模型/ View 概念

c++ - 键入时通过引用传递函数的问题

c++ - 不得删除 C++ 或 C 运算符之间的空格的示例

c++ - 内仿函数概念或接口(interface)

regex - 是否可以在 Oracle 的 regexp_replace 中引用第 10 个及后续替换字符串?

c# - Linq To 对象中的 Regex 和 Like 运算符

c++ - 我如何构造一个仿函数以用于像 boost 的 brent_find_minima 这样的算法?

boost - 如果调用 asio::strand 的析构函数时,该链上仍有一些就绪/未就绪的处理程序怎么办?

c++ - 使用 boost::asio::deadline_timer 实现通用 Timer 类时遇到问题

regex - 在字符串中仅两个下划线之间提取数字模式