@@IF[- (<>%='@a-z0-9\r\n\t).:!_,+/""]+(@@END IF|@ENDIF)
Здравствуйте, я хочу исправить указанное выше регулярное выражение, чтобы сопоставить оба блока текста отдельно с помощью С#. На данный момент он рассматривает ниже как единый матч.
@@IF (<%=SHOPCODE%> == '2' ) THEN
return complicated if
@@ELSE
Boo
@@END IF
!
@@IF (<%=SHOPCODE%> == '1' ) THEN
County is UK
@@ELSE
Not UK
@@END IF
Вы можете попробовать захватить группы вместе с Lazy способом.
(@@IF\b[\S\s]*?\r?\n@@?END ?IF)
Объяснение Regex: (в соответствии с вашими потребностями вы можете изменить необязательно)
( 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
Другой случай жадности...
Используйте неживые кванторы (и упростите регулярное выражение):
@@IF\s+.*?(?:@@END IF|@ENDIF)
Демо здесь: http://regex101.com/r/kV0tM5/1
Часть .*?
будет соответствовать как можно меньше символов.
RegexOptions.Singleline
.
\r?\n?
бесполезно,\n
будет лучше, или^
сRegexOptions.Multiline
.\r
и\n
. Я предложил изменить дополнительный согласно потребности.