Има няколко примерни теми, които изискват малко по-сложна обработка на низове. Именно тази, тази и тази.
По време на лекциите за регулярни изрази също ви показваме многобройни трикове и интересни задачки. Целта им беше да видим лимитите на възможното и да се научим да се изразяваме регулярно.
Помните ли този stackoverflow отговор? Това следва да е отношението ви към решаването на всяка по-комплексна задача с регулярни изрази. Ако си представим един перфектен свят, сложността на "конвенционалния" код и неговото бързодействие са линейна функция на сложността на проблема. В същия този свят, те са експоненциална функция при еквивалентно решение, състоящо се от един регулярен израз. Регулярните изрази са изключително просто и кратко изразно средство при достатъчно малки проблеми. Същевременно са неподходящи за голям клас употреби.
Ако:
- Искате да намерите нещо, простиращо се на много редове
- Има някаква дървовидна структура (примерно отварящи и затварящи тагове)
- Нещо значи различни неща спрямо контекста (примерно ключовата дума
class
vs низът"class"
) - Трябва да празите състояние
- Трябва ви рекурсия
- Чудите се дали това хваща този краен случай и го тествате
- Написали сте регулярен израз и след 30 минути се питате как работеше това
- Написали сте го току що и разбирате как работи, но ви изглежда сложно
Вероятно един самотен регулярен израз не е правилното решение.
- Това значи ли, че не може да използваме регулярни изрази в проектите?
- Не. Просто се уверете, че сте разбили проблема на достатъчно малки подпроблеми. Ако смятате, че е подходящо да използвате регулярен израз за решаването на даден подпроблем, супер.
- Ако не регулярни изрази, тогава какъв алтернативен инструмент да използвам?
- Проста комбинация от множеството полезни методи на класа String
.