Бележка относно [Проект]ите и регулярните изрази

  1. Има няколко примерни теми, които изискват малко по-сложна обработка на низове. Именно тази, тази и тази.

    По време на лекциите за регулярни изрази също ви показваме многобройни трикове и интересни задачки. Целта им беше да видим лимитите на възможното и да се научим да се изразяваме регулярно.

    Помните ли този stackoverflow отговор? Това следва да е отношението ви към решаването на всяка по-комплексна задача с регулярни изрази. Ако си представим един перфектен свят, сложността на "конвенционалния" код и неговото бързодействие са линейна функция на сложността на проблема. В същия този свят, те са експоненциална функция при еквивалентно решение, състоящо се от един регулярен израз. Регулярните изрази са изключително просто и кратко изразно средство при достатъчно малки проблеми. Същевременно са неподходящи за голям клас употреби.

    Ако:

    • Искате да намерите нещо, простиращо се на много редове
    • Има някаква дървовидна структура (примерно отварящи и затварящи тагове)
    • Нещо значи различни неща спрямо контекста (примерно ключовата дума class vs низът "class")
    • Трябва да празите състояние
    • Трябва ви рекурсия
    • Чудите се дали това хваща този краен случай и го тествате
    • Написали сте регулярен израз и след 30 минути се питате как работеше това
    • Написали сте го току що и разбирате как работи, но ви изглежда сложно

    Вероятно един самотен регулярен израз не е правилното решение.


    - Това значи ли, че не може да използваме регулярни изрази в проектите?
    - Не. Просто се уверете, че сте разбили проблема на достатъчно малки подпроблеми. Ако смятате, че е подходящо да използвате регулярен израз за решаването на даден подпроблем, супер.

    - Ако не регулярни изрази, тогава какъв алтернативен инструмент да използвам?
    - Проста комбинация от множеството полезни методи на класа String.

Трябва да сте влезли в системата, за да може да отговаряте на теми.