如何使用正则表达式为我的词法分析器转义字符串文字?

How do I escape string literals using regex for my lexer?

现在,我正在编写词法分析器,我希望能够在考虑转义字符的同时匹配字符串标记。

所以,我希望能够解析这样的东西:

目前,我有以下用于匹配字符串的正则表达式规则:/^\s*(')(.*?)(')/s^\s* 负责前导空格,而 (')(.*?)(') 匹配字符串 3 次:开始标记、字符串本身,最后是结束标记。一旦我识别出一个标记,我将匹配的标记放入一个数组,并从我正在处理的数据的开头删除完整匹配。

我已经尝试修改我的规则以考虑转义字符,但我无法让它工作,坦率地说,我真的不知道从这里该何去何从。我不知道该尝试什么。如果我检查反斜杠,它不会为两个工作。如果我检查两个,它就不会检查三个,等等

有人可以让我走上正确的轨道来实现这个吗?除此之外,我的词法分析器已经完成并完成了它必须做的事情。这是唯一剩下的东西。

您可以使用

/^\s*(')([^'\]*(?:\.[^'\]*)*)(')/s

参见regex demo

详情

  • ^ - 字符串开头
  • \s* - 0+ 个空白字符
  • (') - 捕获组 #1:a ' char
  • ([^'\]*(?:\.[^'\]*)*) - 捕获组 #2:
    • [^'\]* - '\
    • 以外的 0+ 个字符
    • (?:\.[^'\]*)* - 重复 0 次或多次:
      • \. - \ 后跟任意字符
      • [^'\]* - '\
      • 以外的 0+ 个字符
  • (') - 捕获组 #3:a '.