У меня проблема с соответствием регулярному выражению. Мне нужно найти указанную подстроку c в строке. Вот несколько примеров:
1. IF[A != B; C[0]; D] ==> IF[A != B; C[0]; D]
2. IF[A != B; IF[E < F; ...; ...]; D] ==> IF[E < F; ...; ...]
3. IF[A != B; C; D] ==> IF[A != B; C; D]
Итак, у меня есть это регулярное выражение: IF\[([^\[\]]*)\]
. Он отлично работает в случаях 2 и 3, но в случае 1 есть C[0]
, который содержит квадратные скобки.
Я попытался изменить свое регулярное выражение следующим образом: IF\[((?!IF))\]
и окончательно IF\[(.+(?!IF))\]
. Я добавил взгляд вперед, чтобы сказать, что «оставьте IF, который не содержит другой IF». Теперь это работает в случаях 1 и 3, но в случае 2 возвращает всю строку.
Как создать правильную головку для решения этой проблемы? Мне нужно найти самый внутренний IF в строке, который может быть всей строкой.
Я уже попытался найти решение в этом ответе: { ссылка }