我正在尝试通过拆分并保留分隔符,括号,点和双引号等分隔符来使我的标记生成器工作。
string s ("main() a; i, Keyboard.readInt(HOW MANY NUMBERS? );");
regex e ("([.,;-]|[^.,;-]+)");
regex_iterator<std::string::iterator> rit ( s.begin(), s.end(), e );
regex_iterator<std::string::iterator> rend;
while (rit!=rend) {
cout << rit->str() << endl;
++rit;
}
当我编译它时,它有点破碎。我的正则表达式([.,;-]|[^.,;-]+)
有什么问题吗?我得到的输出看起来像这样:
main() a
;
i
,
Keyboard
.
readInt(HOW MANY NUMBERS? )
;
我希望像这样输出:
main
(
)
a
;
i
,
Keyboard
.
readInt
(
HOW MANY NUMBERS?
)
;
答案 0 :(得分:0)
您最大的问题是,您没有完成拆分令牌列表。你想要的是类似于[.,;-:()\[\]"']|[^.,;-:()\[\]"']+
的东西,它应该能够更好地分解你的字符串。
当然,尝试使用正则表达式(具有较少的正式权力)来解析编程语言(这是context-free grammar的类型)并不是最好的主意。但是,由于我不知道这里的背景,我假设你知道这一点,并且正则表达式确实是你前进的最佳方式。