@@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
答案 0 :(得分:3)
您可以尝试使用 Lazy 方式捕获群组。
(@@IF\b[\S\s]*?\r?\n@@?END ?IF)
正则表达式解释:(根据您的需要,您可以更改可选项)
( 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
部分.*?
会将匹配为尽可能少的字符。