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



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

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

  • 'Hello World'[', Hello World, ']
  • 'There's an apostrophe in here'[', There's an apostrophe in here, ']
  • 'This is a backslash: \'[', This is a backslash: , '].

目前,我有以下用于匹配字符串的正则表达式规则:/^s*(')(.*?)(')/s.^s*考虑前导空格,而(')(.*?)(')与字符串匹配 3 次:开始标记、字符串本身,最后是结束标记。识别出令牌后,我将匹配的令牌推送到数组中,并从我正在使用的数据的开头删除完全匹配项。

我试图修改我的规则以解释转义字符,但我无法使其工作,坦率地说,我真的不知道从这里开始。我什至不知道该尝试什么。如果我检查反斜杠,它对两个人不起作用。如果我检查两个,它对三个不起作用,依此类推。

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

您可以使用

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

请参阅正则表达式演示。

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

最新更新