Рассмотрим следующий скрипт (это полная чушь на псевдо-языке):
if (Request.hostMatch("asfasfasf.com") && someString.existsIn(new String[] {"brr", "hrr"})) {
if (Requqest.clientIp("10.0.x.x")) {
somevar = "1";
}
somevar = "2";
}
else {
somevar = "first";
}
string foo = "foo";
// etc. etc.
Как бы вы взяли из него параметры и содержимое if-блока? Блок if имеет формат:
if<whitespace>(<parameters>)<whitespace>{<contents>}<anything>
Я пытался использовать String.split()
с шаблоном регулярных выражений ^if\s*\(|\)\s*\{|\}\s*
, но это с треском провалилось. А именно, проблема в том, что ) {
находится также во внутреннем блоке if, и закрывающий }
также находится во многих местах. Я не думаю, что ни ленивое, ни энергичное расширение здесь не работает.
Итак ... какие-нибудь указатели на то, что мне может понадобиться здесь, чтобы реализовать это с помощью регулярных выражений?
Мне также нужно получить оставшуюся строку без кода блока if (поэтому код начинается с else { ...
). Использование только String.split()
кажется затруднительным, поскольку нет информации о длине частей, которые были проанализированы.
Я изначально создал решение на основе циклов (интенсивно используя String.substring()
) для этого, но оно скучно. Я хотел бы иметь что-то более изумительное вместо этого. Должен ли я использовать регулярное выражение или создать пользовательскую универсальную функцию (есть много других случаев, кроме этой), которая вместо этого использует анализируемую строку и шаблон (рассмотрим шаблон if<whitespace>(...
выше)?
Редактировать : Изменен возврат к назначению переменных, поскольку в противном случае это не имело бы смысла.