如何用正则表达式表达类似cpp的字符串(词法分析)

时间:2017-11-18 03:20:43

标签: c++ regex analysis lexical

我正在编写一个cpp程序,它是一个类似cpp语言的词法分析器。为了找到每个令牌,我使用正则表达式进行匹配,然后决定选择正确的令牌。

这种语言的字符串与cpp完全相同。我使用的正则表达式是这样的:

\"([^\\\"]|\\.)?\"

但这不是真的正确。对于这样的输入:

"String \" int"

输出应该是一个字符串标记,但是使用我的正则表达式,我得到一个字符串标记(" String")和一个int关键字,然后出错。

你知道如何处理这个问题吗?或者我该如何更改正则表达式?

P.S。 :我使用regex_search()来查找匹配。

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用

std::regex rx(R"(\"[^\"\\]*(?:\\.[^\"\\]*)*\")");

模式为"[^"\\]*(?:\\.[^"\\]*)*"

  • " - 双引号
  • [^"\\]* - 除了双引号和反斜杠之外的零个或多个字符
  • (?:\\.[^"\\]*)* - 零次或多次重复
    • \\. - 前面有反斜杠的任何字符(如果您还需要支持转义换行符,请将.替换为[\s\S]
    • [^"\\]* - 除了双引号和反斜杠之外的零个或多个字符
  • " - 双引号。

请参阅regex demo