现在,我正在编写一个词法分析器,我希望能够在考虑转义字符的同时匹配字符串标记。
所以,我希望能够解析这样的东西:
'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:'
.