LINUX.ORG.RU

Regexp in C

 , ,


2

1

Есть две либы, гнушная regex.h и pcre. С какой начать знакомство для новичка Си? И вкратце плюсы/минусы можете рассказать?

Update: прикрутил pcreposix.h — все зашибись. Всем спасибо :)

★★★★★

Последнее исправление: gh0stwizard (всего исправлений: 1)

Новичок си, что тебе непонятно в си?

nokachi
()

у перла есть обвязки (сам не пробовал). извращаться так извращаться.

false ★★★★★
()

Обе. Порядок можно определить монеткой. Потом сам выберешь, что удобнее.

const86 ★★★★★
()

Всё зависит от задачи. Помнится была у меня задачка, парсить данные. После долгого мучения с си, учитывая что контент менялся время от времени, плюнул, написал за час на перле и решил проблему. А на си, позже, переписал только критические по времени алгоритмы обработки. А потом переписал снова на перле с мемоизацией, и скорость сравнилась с си.

P.S. в общем или я говнокодер, или просто писать на Си прикладные задачи - хер собачий и потеря времени.

anonymous
()
Ответ на: комментарий от anonymous

Всё зависит от задачи.

Задача научится пользоваться регспами в си. То, что на перле можно делать многое, я прекрасно знаю. Но си я не для этого изучаю. Более того, регепсы активно используются в утилите file (libmagic) как раз на сях. Так что, тут еще вопрос, почему аналога на перле не было написано нормального. И единственный живой и рабочий в 80+% случаях это модуль с обвязкой к libmagic.

gh0stwizard ★★★★★
() автор топика
Ответ на: комментарий от gh0stwizard

Задача научится пользоваться регспами в си.

Обрести навык ради обретения навыка. Будь по твоему, тебе видней.

Так что, тут еще вопрос, почему аналога на перле не было написано нормального.

песенка была такая: Кому это надо? Никому не надо! - Кому это нужно? Никому не нужно!

Видимо не нужно, раз существующая устраивает.

anonymous
()
Ответ на: комментарий от anonymous

глянул утилиту file, не нашел там регэкспов. Ну да ладно, поздно, видимо глаз спит.

anonymous
()
Ответ на: комментарий от gh0stwizard

Хочу замутить регепсы в си (позарез нужны :).

man regex, там есть все, чтобы научиться пользоваться регулярками на си.

Deleted
()

google re2. «google» - в данном случае не глагол. Весьма быстрая библиотека для регулярок.

А ещё можно забить на Си и юзать boost::regex.

Про regex.h не понял:

$ apt-file search regex.h|wc -l
34

Если имеется в виду POSIX regex, то она ЕМНИП уже не поддерживается, а ещё там нету поддержки юникода.

Про libpcre ничего плохого сказать не могу.

DELIRIUM ☆☆☆☆☆
()

В pcre нет ничего сложного, насколько я помню, она более функциональна по сравнению с той, что входит в состав glibc. Насчёт оверхеда не скажу, для меня регулярки никогда не были узким местом.

wakuwaku ★★★★
()
Ответ на: комментарий от DELIRIUM

re2

Слышал, посмотрю.

boost::regex

Сам boost надо юзать тогда, когда он нужен, а не для всего подряд. ИМХО, оверхед.

Если имеется в виду POSIX regex, то она ЕМНИП уже не поддерживается, а ещё там нету поддержки юникода.

http://www.gnu.org/software/libc/manual/html_node/Regular-Expressions.html - ты про нее?

gh0stwizard ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Речь я понял про The UNIX Programming Environment? Хорошо, почитаю. Также тут советуют «Mastering Regular Expressions» от Jeffrey Friedl.

gh0stwizard ★★★★★
() автор топика
{
   char tmp_path[20];
   regex_t regex;
   if (0 != regcomp (&regex, "[0-9a-f]+\\.[0-9a-f]+", REG_EXTENDED))
     return (LIBUSB_ERROR_NO_MEM);
 
   DIR *dev_usb_dir = opendir (dev_usb);
   if (NULL == dev_usb_dir)
     {
       regfree (&regex);
       return (LIBUSB_ERROR_ACCESS);
     }
 
   struct dirent *vidpid;
   while ((vidpid = readdir (dev_usb_dir)) != NULL)
     {
       if (0 != regexec (&regex, vidpid->d_name, 0, NULL, 0))
     continue;
       usbi_dbg ("found %s", vidpid->d_name);
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.