匹配所有字符串后跟星号

时间:2012-10-03 06:06:34

标签: c# .net regex

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

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

这些是我的翻译的示例语法

* 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

2 个答案:

答案 0 :(得分:1)

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

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

(?<=REGEX_CONDITION)确保匹配完成,但匹配的部分(在您的情况下不是“[”]不包含在匹配的结果中。

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

编辑:为了使其完全正常工作,我只是添加了它或对其进行了调整

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

答案 1 :(得分:0)

尝试使用群组并使用[^\[](\*.*)

中的群组值