基本上我正在为我们的编译器课程创建一个简单的解释器。当然这不是一个家庭作业类型的问题。
星号后面的任何内容都被视为注释,前提是它不是字符串的一部分。我的翻译器中有一个转义字符,它是括号。
这些是我的翻译的示例语法
* hello world
OUTPUT: "This is asterisk [*]" * outputs string
OUTPUT: "This is asterisk *" * outputs string produces syntax error
x = "[*]" & "hello" & "[*]*]" this is already comment which produces syntax error
当我尝试运行此Regex
[^\[]\*.*
符合以下内容:
* hello world
* outputs string
*" * outputs string produces syntax error
]*]" this is already comment which produces syntax error
我的问题是,为什么regex
“吃”之前的一个角色?其中我已经需要了
* hello world
* outputs string
*" * outputs string produces syntax error
*]" this is already comment which produces syntax error
答案 0 :(得分:1)
您需要使用零宽度断言来停止捕获您想要匹配的条件,并且 不要“吃”:
(?<=[^\[])\*.*
(?<=REGEX_CONDITION)
确保匹配完成,但匹配的部分(在您的情况下不是“[”]不包含在匹配的结果中。
编辑:为了使其完全正常工作,我只是添加了它或对其进行了调整
(?<=[^\[])\*.*|^\*.*
答案 1 :(得分:0)
尝试使用群组并使用[^\[](\*.*)