当你有树模式时,正则表达式没有按预期工作

时间:2011-10-08 15:21:52

标签: c# .net regex

我有这个正则表达式:

^(?'IF'[IF\s]{3})(?'CONDICTION'[\w\s\d+=/\.\*-><\(\)]+)(?'THEN'THEN)(?'TRUE'[\w\s\d+=/\.\*-><\(\)]*)(?'ELSE'[\s\w]ELSE[\s|\n])(?<FALSE>[\w\s\d.+\-*/]*)(?<ENDIF>([\s\nENDIF]{6}))

对于这个表达式:

IF 1 = 1 THEN 1 ELSE 3 ENDIF

工作正常,我有这个小组:

IF: IF
CONDICTION: 1 = 1 
THEN: THEN
TRUE: 1
ELSE: ELSE 
FALSE: 3
ENDIF: ENDIF

但如果我尝试这个表达式:

IF 1 = 1 THEN 1 ELSE IF 1 = 2 THEN 3 ELSE 2 ENDIF ENDIF

我有这个小组:

IF: IF 
CONDICTION: 1 = 1 THEN 1 ELSE IF 1 = 2 
THEN: THEN
TRUE:  3
ELSE:  ELSE 
FALSE: 2 ENDIF
ENDIF:  ENDIF

但我想要这个:

IF: IF 
CONDICTION: 1 = 1
THEN: THEN
TRUE:  1
ELSE:  ELSE 
FALSE: IF 1 = 2 THEN 3 ELSE 2 ENDIF
ENDIF:  ENDIF

我需要匹配的正则表达式是什么?

2 个答案:

答案 0 :(得分:0)

你似乎正走在正确的轨道上。您已经定义了语法,因此您需要对表达式进行标记,并根据语法对其进行解析。换句话说,您需要根据您的特定需求编写解析器。

一些有用的链接:

http://www.dreamincode.net/forums/topic/110782-c-beginner-parser-class-tutorial/

答案 1 :(得分:0)

我使用Irony

解决了我的问题

我将在博客中解释详细信息并编辑此答案!