gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:07:32 25 4
gpt4 key购买 nike

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

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

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

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

"String \" int"

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

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

附言: 我使用 regex_search() 来查找匹配项。

谢谢。

最佳答案

你可以使用

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

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

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

参见 regex demo .

关于c++ - 如何用正则表达式表达类似cpp的字符串(词法分析),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47362136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com