Можно ли использовать регулярные выражения в C ++? - PullRequest
5 голосов
/ 02 мая 2009

Дубликат: Есть функция для использования сопоставления с образцом (с использованием регулярных выражений) в C ++?

Я не уверен, где его можно использовать ... есть ли функции типа парсера, которые принимают в качестве аргумента какое-то регулярное выражение или что-то в этом роде? Я только что узнал, что мой редактор выделит строку после / как "регулярное выражение" для синтаксиса C / C ++, что я считаю странным ...

Ответы [ 10 ]

18 голосов
/ 02 мая 2009

В языке vanilla C ++ нет поддержки регулярных выражений. Однако есть несколько библиотек, которые поддерживают Regex. Boost является популярным.

Ознакомьтесь с реализацией Boost's Regex.

8 голосов
/ 02 мая 2009

PCRE - де-факто стандартная библиотека регулярных выражений для C (и она также работает в C ++).

(Что делает ваш редактор, я не знаю. Использование библиотеки, подобной PCRE или любой другой, предлагаемой, не меняет синтаксис C - ваши определения регулярных выражений всегда будут храниться в строках.)

2 голосов
/ 02 мая 2009

Регулярные выражения являются частью расширения стандартной библиотеки C ++, определенного в TR1 ( см. Главу 7 в документации ). В библиотеке dinkumware , т. Е. Реализованы расширения regEx. Я не знаю о других реализациях.

Расширения просты и понятны в использовании.

1 голос
/ 03 мая 2009

Если вы используете Visual Studio и переносимость не является серьезной проблемой, вы можете получить результаты довольно быстро (без загрузок, без установок) с помощью симпатичного средства ATL под названием CAtlRegExp . Он содержит полный и эффективный анализ и сопоставление RegEx ( онлайн-образец ). Хотя не сравнивал его производительность с BOOST.

1 голос
/ 03 мая 2009

Нет, C ++ не имеет и не собирается получать регулярные выражения с использованием синтаксиса /.../, используемого в некоторых языках. Ваш редактор не прав.

Как показывают все остальные ответы, библиотеки регулярных выражений для C ++ существуют (и одну планируется включить в C ++ 0x), но они обрабатывают строки, разделенные символом ", а не косыми чертами, поэтому они не являются причиной для вашего поведение редактора.

1 голос
/ 02 мая 2009

Просто для полноты Qt имеет QRegExp , который может сопоставлять регулярные выражения.
Это обычно хорошо, если вам нужно небольшое регулярное выражение для удаленной функции в вашем грандиозном приложении Qt. Для чего-то более серьезного, PCRE - определенно правильный путь.

1 голос
/ 02 мая 2009

Boost.Xpressive позволяет записывать регулярные выражения в виде строк (как в Boost.Regex ) или статически с шаблонами выражений. Это похоже на Boost.Spirit для грамматики.

Например, эти два эквивалента:

sregex rex1 = sregex::compile("(\\w+) (\\w+)!"); //normal string based way
sregex rex2 = (s1= +_w) >> ' ' >> (s2= +_w) >> '!'; //expression template way
0 голосов
/ 03 мая 2009

Если вы находитесь в Visual Studio, вы можете использовать Greta (поиск в greta regex), но я думаю, что это немного медленнее, чем boost. Это действительно легко использовать, хотя.

0 голосов
/ 02 мая 2009

Я не думаю, что вы можете выполнить регулярное выражение в C ++ без использования сторонней библиотеки. Qt и Gtk + / Gtkmm оба идут с этим. Visual C ++ 2008 также поставляется с этой возможностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...