我希望修复此正则表达式以分别匹配两个文本块

时间:2014-07-23 15:35:05

标签: c# regex

@@IF[- (<>%='@a-z0-9\r\n\t).:!_,+/""]+(@@END IF|@ENDIF)

您好我希望修复上面的正则表达式,使用C#分别匹配两个文本块。目前,它将下面的内容视为一场比赛。

@@IF (<%=SHOPCODE%> == '2' ) THEN
return complicated if 
@@ELSE
Boo
@@END IF 

!

@@IF (<%=SHOPCODE%> == '1' )  THEN
County is UK
@@ELSE
Not UK
@@END IF

2 个答案:

答案 0 :(得分:3)

您可以尝试使用 Lazy 方式捕获群组。

(@@IF\b[\S\s]*?\r?\n@@?END ?IF)

Live Demo

正则表达式解释:(根据您的需要,您可以更改可选项)

  (                        group and capture to \1:
    @@IF                     '@@IF'
    \b                       the word boundary
    [\S\s]*?                 any character (0 or more times (least possible))
    \r?                      '\r' (carriage return) (optional)
    \n?                      '\n' (newline)
    @                        '@'
    @?                       '@' (optional)
    END                      'END'
     ?                       ' ' (optional)
    IF                       'IF'
  )                        end of \1

答案 1 :(得分:1)

另一个贪婪的案例......

使用non-greedy quantifiers(并简化正则表达式):

@@IF\s+.*?(?:@@END IF|@ENDIF)

在这里演示:http://regex101.com/r/kV0tM5/1

部分.*?会将匹配为尽可能少的字符