Обыскал все и вся, но ничего толкового не нашел.
Есть ли в С++ возможность проверки регулярных выражений штатными средствами? Или только из библиотеки Boost?
С boost дел не имел. Для его использования нужно подключать какие-то заголовочные файлы или что-то скачивать и устанавливать?
Задача проанализировать текстовый файл на наличие разных тегов (пусть это будут html теги). Результаты будут записываться в другой файл. Какие-то теги нужно просто будет удалить, а где-то удалить все содержимое от тега до тега включительно (например: [table]....[/table]).
Не знаю как подойти к данному вопросу:
- писать много проверок (case, if) анализируя каждую строчку файла и вычищая все ненужное (разновидностей тегов хватает - порядка 20-30);
- использовать какие-либо средства (желательно штатные, если они есть) для анализа этих же самых строк, но уже с помощью регулярных выражений.
Регулярные выражения в С++
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Упрощённый вариант регулярных выражений для Visual С++ есть в библиотеке ATL (заголовочный файл atlrx.h). Описание имеется в MSDN (шаблон CAtlRegExp).
В С++ кроме языка нет никаких "штатных средств" - не бейсик. Все возможности бОльшие просто языка обеспечиваются какими-либо заранее приготовленными шаблонами, библиотеками и проч. Часть из них поставляется вместе с компилятором, другие части можно найти отдельно. Выше давались советы, какие именно. В любом случае "надо подключать заголовочные файлы", даже для тех средств, что поставляются вместе со средой программирования - язык так устроен.Dragon писал(а):Обыскал все и вся, но ничего толкового не нашел.
Есть ли в С++ возможность проверки регулярных выражений штатными средствами? Или только из библиотеки Boost?
С boost дел не имел. Для его использования нужно подключать какие-то заголовочные файлы или что-то скачивать и устанавливать?
Boost - де-факто "универсальное общепринятое средство эффективных алгоритмов", поэтому его использование - нормальное решение не "по-колхозному".
Написать регулярное выражение выполняющее сложную работу - задача более трудная, чем "написать много строк if", поэтому, если нужно быстро и всё равно как на один раз - лучше писать "много if". Если нужно хорошо и с возможностью поддержки в будущем - лучше писать с использованием регулярных выражений.
С++ не лучший язык для написания такой программы. Если нет специальных требований, вынуждающих выбирать именно C++, то на Перле такая программа делается быстрее, надёжнее в работе и методологически правильнее. Более того, наверное и решение на C++ надо было бы писать именно так - сначала сделать прототип на Перле, отладить в этом прототипе регулярные выражения выполняющие разбор, а потом просто переписать прототип на С++. Это будет быстрее для получения правильного результата.
Перл я к сожалению не знаю. С Boost буду знакомиться. На данном этапе пока свой велосипде изобретаю, но это уже другая история.
Dragon писал(а):Перл я к сожалению не знаю. С Boost буду знакомиться. На данном этапе пока свой велосипде изобретаю, но это уже другая история.
Если вы знаете С - вы знаете и 3/4 Перла

Регулярные выражения - это инструмент, которым обладают преимущественно скриптовые языки. К ним можно так же добавить VBScript и JavaScript. Ещё библиотека регулярных выражений есть в платформах .NET и Java. В библиотеке Qt для С++ есть тоже классы для работы с регулярными выражениями.