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

How to express cpp-like string with regex (lexical analysis)

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

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

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

但这并不完全正确。对于这样的输入:

"String \" int"

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

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

P.S。 : 我使用 regex_search() 找到匹配项。

谢谢。

您可以使用

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

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

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

regex demo