The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Регулярные выражения в Си"
Отправлено Soldier, 10-Апр-05 20:49 
>Мужики, ну что? Никто не программил с регекспами на Си что ли?
>


Ну я программил :). Я вообще перл не признаю :)

Просто если
>Пишу с помощью regcomp() и regexec()

то вопросов
> А как то же самое сделать на Си?
возникать не должно.

Ну а если "Собираюсь использовать regcomp() и regexec()", тогда все что
вам нужно просто прочесть man. У меня это man 3 regex и  man 7 regex
Откуда сразу ясно, что если:

1) строка="aaaaa", pattern="a" (или "(a)" или [a]), то найдется "a"
2) строка="aaaaa", pattern="a+" (или (a+) или [a]+), то найдется "aaaaa"

Пример:

#include <sys/types.h>
#include <regex.h>
#include <stdio.h>

int match(const char *string, char *pattern, regmatch_t *reg) {
  int status;
  regex_t re;
  size_t s;

  (!reg) ? (s=0) : (s=1);
  if(regcomp(&re, pattern, REG_EXTENDED) != 0)  return 0;
  status = regexec(&re, string, s, reg, 0);
  regfree(&re);
  return !status;
}


void print_matched(char *s,char *p, regmatch_t reg) {
  int i;
  printf("Patern '%s' found in '%s', matched: '",p,s);
  for (i=reg.rm_so; i<reg.rm_eo; i++) putchar(s[i]);
  printf("', rest of string: '%s'\n",s+i);
  putchar('\n');
}


int main() {
  regmatch_t rg;
  char str[]="aaaaa";
  char ptr[]="a";
  char ptr2[]="a+";

  if (match(str,ptr,&rg))  print_matched(str,ptr,rg);
  if (match(str,ptr2,&rg))  print_matched(str,ptr2,rg);
}

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру