c ++正则表达式表达式分隔符

时间:2016-07-31 15:29:19

标签: c++ regex

我正在尝试通过拆分并保留分隔符,括号,点和双引号等分隔符来使我的标记生成器工作。

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?
)
;

1 个答案:

答案 0 :(得分:0)

您最大的问题是,您没有完成拆分令牌列表。你想要的是类似于[.,;-:()\[\]"']|[^.,;-:()\[\]"']+的东西,它应该能够更好地分解你的字符串。

当然,尝试使用正则表达式(具有较少的正式权力)来解析编程语言(这是context-free grammar的类型)并不是最好的主意。但是,由于我不知道这里的背景,我假设你知道这一点,并且正则表达式确实是你前进的最佳方式。