1

基本上我正在为我们的编译器课程创建一个简单的解释器。当然,这不是一个家庭作业类型的问题。

后面有星号的任何内容都被视为注释,前提是它不是字符串的一部分。我的解释器中有一个转义字符,它是括号。

这些是我的解释器的示例语法

* 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
4

2 回答 2

1

您需要使用零宽度断言来停止捕获您只想匹配的条件,而不是“吃”:

(?<=[^\[])\*.*

(?<=REGEX_CONDITION)确保匹配完成,但匹配的部分(在您的情况下为 NOT A "[" )不包含在匹配的结果中。

演示:http ://regexr.com?32b99

编辑:为了使其完全正常工作,我只是添加或条件它

(?<=[^\[])\*.*|^\*.*
于 2012-10-03T06:17:59.600 回答
0

尝试使用组并使用组值,如[^\[](\*.*)

于 2012-10-03T06:29:34.290 回答