我正在使用boost/regex.hpp
庫。正則表達式旨在匹配浮點數或任意數學運算符列表之一。尾部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();
}
你打印的比賽怎麼樣?問題似乎在代碼的這一部分。 – tripleee 2015-03-02 06:09:02
@tripleee我添加了打印代碼。後來我打算用代碼替換'cout'以將標記添加到矢量中。 – 2015-03-02 09:37:39