Скажем, если речь идет об использовании RE для парсинга HTML (предположим, для извлечения ссылок), то это однозначно плохо, для этого есть готовые решения более высокого уровня.
Лично у меня был такой опыт с RE — необходимо было организовать парсинг логов одной большой телефонной станции, началось все с использования sed и все было очень хорошо и быстро, пока не выяснилось, что эта железка в основной поток сообщений может асинхронно подбрасывать пакеты других сообщений. В итоге sed выражение разрослось до более чем ста строк и стало работать минут 10, само собой разобраться в нем мог только один человек. Когда мое терпение лопнуло, я сел и переписал все на C при помощи flex и bison, программа стала работать 10 секунд. Думаю, что это хороший пример того, как RE участвует в накоплении тех.долга
Но, с другой стороны, если речь идет, скажем, о валидации каких-то пользовательских данных, то почему бы и нет.
Думаю, что резюме может быть таким — если входные данные сложны по своей структуре или число входных вариантов велико, то RE использовать не надо. Если же данные просты (не больше одной строчки), то RE вполне себе применимы. Да, еще один момент, если данные просты, но их много (читай — высоконагруженная система, которая основное время тратит именно на обработку RE), то RE использовать не следует, выгоднее будет написать свой парсер под конкретную задачу.