![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| informn |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 15.7.2005 Репутация: нет Всего: нет |
Предположим что есть строки такого вида:
<word id="16" aid="121">AB</word> <word id="17" aid="166">AD</word> т.е. регулярные выражения. Есть ли какая-нибудь стандартная библиотека в visual c++, ктр. Позволяет разбирать такие выражения? Т.е. на вход подаётся строчка, а на выходе значения 16, 104, AB. А если в строчке есть ошибка, то соответствующие сообщение. Я знаю, что эту задачу можно сделать самому используя string, find и т.д., но хотелось бы что-нибудь автоматичекое и вид строчки может очень сильно изменяться. Можно описание этой библиотеки(функции), желательно на русском. Компилятор: Visual c++7.1!!! |
|||
|
||||
| S.A.P. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2664 Регистрация: 11.6.2004 Репутация: 9 Всего: 71 |
informn Стандартных вроде нет (если boost еще в стандарт не вошел
Сам юзаю QRegExp из библиотеки QT, но она тяжела и если брать ее, то и GUI делать на ней ИМХО. Добавлено @ 21:11 Есть еще PCRE библиотеки для C++. Самый стандартный подход ИМХО. |
|||
|
||||
| Ni@m |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 189 Регистрация: 11.3.2004 Где: почти Киев Репутация: 0 Всего: 6 |
--------------------
Обучение - как переливание воды из одной чашки в другую: всегда лучше, чтоб чашка со знаниями нахордилась выше. |
|||
|
||||
| informn |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 15.7.2005 Репутация: нет Всего: нет |
Вся проблема в том, что нужно пользоваться только тем, что есть в стандартной поставке компилятора, т.е. никаких внешних lib(ну в крайнем случае можно подключить только cpp и h).
pcre по-моему нет в стандартной комплектации?!. |
|||
|
||||
| chipset |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Если честно, я не уверен что есть какие-либо средства для обработки регекспов стд. поставке, ну разве что кроме .NET
Попробуй буст, это уже почти стандарт.. --------------------
|
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
В ATL есть классы для работы с регулярными выражениями: CAtlRegExp, CAtlRE***. За подробностями в MSDN, я ими никогда не пользовался, просто знаю, что они есть. ATL входит в поставку MSVC 7.1.
Есть также header-only библиотека регулярных выражений GRETA от Microsoft. Побыстрее и помощнее ATL-ных регэкспов. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| gepard |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2477 Регистрация: 29.2.2004 Репутация: 2 Всего: 40 |
А самому слабо что ли написать?
-------------------- Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным! © Я, Берсерк, что значит - Неистовый. |
|||
|
||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Там немало писать. --------------------
|
||||
|
|||||
| chaos |
|
||||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 6 Всего: 44 |
да и зачем изобретать велосипед |
||||
|
|||||
| sleepWalker |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 27.7.2005 Репутация: нет Всего: нет |
informn а почему бы для твоего случая не воспользоваться обычным XML парсером?
|
|||
|
||||
| informn |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 15.7.2005 Репутация: нет Всего: нет |
уже пользуюсь, но иногда может быть выражение не xml
|
|||
|
||||
| Step |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: 5 Всего: 25 |
долбонутая вещь, медленная, не удобная, половина че в мсдн описано работает через одно место.... вообщем я ее использовал у меня 27 страниц текста обрабатывалось за 47 секунд написал свой модулб 4 секунды -------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: нет Всего: 128 |
Так как же надо пользоваться регулярками в С++? Как сделать это безо всяких там библиотек, а только со string, find, как указывал informn? Мне нужно именно так. Приведите пример обработки какой-нибудь строки (P.S. и регулярку желательно попроще для примера).
|
|||
|
||||
| gepard |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2477 Регистрация: 29.2.2004 Репутация: 2 Всего: 40 |
Блин, да мы же программисты! Ётить, это мы должна писать такие штуки, а другие - юзать! ИМХО! Я - велосипедист до мозга костей и буду таким всегда, потому что не доверяю чужим алгоритмам. Вот, если я вижу, что мой, максимально оптимизированный код, работает хуже, чем бибилиотечный, то тогда я может ещё и буду юзать эту библиотеку. И то врядли, потому что узнаю, как это так написали и перенапишу самостоятельно. -------------------- Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным! © Я, Берсерк, что значит - Неистовый. |
|||
|
||||
| comcon1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: 12 Всего: 17 |
ОФФТОП:
Не-е-еее. Для таких програмистов, как ты, еще навалом действительно полезной работы -- не велосипедной. Куча нерешенных задач, потребности растут... ИМХО А таким велосипедизмом пусть занимаются начинающие програмисты. Составители библиотек не просто так их составляли -- а для того чтобы ТЕБЕ было легче решать задачи более высокого уровня сложности, не предусмотренные стандартными библиотеками. ---------------- кстати, у меня в линуховых манах нашлась С-шная библиотека:
Юзай буустовский регекс, но там по умолчанию будет линковаться с динамической библиотекой. Но можно и слинковать с архивом статически. Это сообщение отредактировал(а) comcon1 - 6.8.2005, 15:41 |
|||
|
||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: нет Всего: 128 |
Меня кто-нить слышит?!
И почему новички должны быть велосипедистами? И почему обязательно мы должны юзать встроенные библиотеки? Например, в стандартном заголовочном файле <math.h> есть функция sqrt(x), но она сделана под типом double. А мне не надо double! Мне надо int! И я написал свою. В своем заголовочном файле. Очень даже удобно... P.S. сорри за оффтоп, но не я его начал. |
|||
|
||||
| comcon1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: 12 Всего: 17 |
ОФФТОП:
Потому что все программисты начинают с велосипедов. Невозможно сразу писать кардинально новые проги. Прежде я писал стат-проги сам, транслятор, реализовывал функции интегр-я, диффер-я, и пр. математику. Сейчас я этого делать не стану. Я возьму библиотеки соответствующие. Но если мне потребуется больше, я всегда знаю примерно, как они устроены внутри, поскольку сам писал в свое время. Вот у меня написан stack под мою прогу, он умеет саморазрастаться, самоуменьшаться в памяти и еще производить некотторые доп.функции с нужным мне типом, так я и не стремлюсь его заменять std::stack-ом. ТОПИК: Ты читал тему? Предложили кучу библиотек. В STL-е нет разборки регекспов. Выбирай библиотеку, которая нравится, и вперед. BOOST еще не поставил?? Тогда вперед. Как его ставить -- найдешь в FAQ-е или в соотв. теме. Сюда - КОНКРЕТНЫЕ ВОПРОСЫ!! |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |