Мне трудно отбросить биты выражения, которое я не хочу, и сохранить биты, которые я делаю.
Проблема в том, что задана строка ввода:
{if cond}foo{else}bar{/if}
Хотелось бы просто иметь:
0: {if cond}foo{else}bar{/if}
1: cond
2: foo
3: bar
А для входной строки:
{if cond}foo{/if}
Я бы хотел иметь:
0: {if cond}foo{else}bar{/if}
1: cond
2: foo
3:
Регулярное выражение, которое я получил в настоящее время, выглядит следующим образом:
\{if ([a-z0-9]+)\}([^\{]*?)(((?:\{else\})?)(.*?)?)\{/if\}
Я получаю следующие данные:
0: {if cond}foo{else}bar{/if}
1: cond
2:
3: foo{else}bar
4:
5: foo{else}bar
Что потребует дальнейшего разбора бита foo{else}bar
для получения соответствующих значений.
Является ли мое регулярное выражение где-нибудь близко?
Меня не слишком беспокоит тип данных, которые могут быть обработаны, включая {
в теле оператора if, разрешающего прерывать регулярное выражение Значения foo
и bar
могут быть любыми, кроме {
.
.
Спасибо
Дом