Linux-Bulgaria.ORG
навигация

 

начало

пощенски списък

архив на групата

семинари ...

документи

как да ...

 

 

Предишно писмо Следващо писмо Предишно по тема Следващо по тема По Дата По тема (thread)

Re: lug-bg: POSIX regex


  • Subject: Re: lug-bg: POSIX regex
  • From: Nikolay Mitev <nikolaym@xxxxxxxxxxxxxxxxxxx>
  • Date: Thu, 18 Sep 2003 14:39:53 -0500

George Danchev wrote:

On Thursday 18 September 2003 20:44, Nikolay Mitev wrote:
Здравейте,

peyo wrote:
Здрвасти отново. Аз днес май ми е ден да ми е накриво:((
Значи пиша едно софтуерче на С за Линукс, което ужасно ще ми облекчи
живота. Въпроса е, че е за доста слаба машина и най-читавият вариант е да
се използва С за целта + regex. Обаче въпросното regex е нещо, което се
случва на други хора. Та трябва да използвам POSIX regex functions -
демек да се сгърча. И не мога и не мога да измисля - като ми падне
стринг, как да напиша regex-a така, че да хване дали това е ИП адрес или
не е. Само да ви кажа, че май тук ne e kato v Perl regex. пробвам
\d+.\d+\d+.\d+, (1-254).(1-254).(1-254). (1-254)    ама не...
Та може ли някои по-запознат да ми окаже HEEELP!?
10x in advance( да не си помислите, че не знам англически)
Направо цяла програмка получаваш :-)

---------8<--------cut here------------------

добавяме ;-)

#include <stdio.h>

ахъм, got me there...


#include <regex.h>

/* returns 0 if string is a valid ip

  > 0 otherwise

*/

int is_ip (const char *string) {
   int    status;
   regex_t    re;

   const char *pattern =
"[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}";

тука май имаше и други предложения ;-)

Мдааа, нищо не му пречи да замени pattern с някое от другите предложения. Аз просто показах как се ползва API-то, защото, незнайно защо реших, че той за него пита...

   if (regcomp(&re, pattern, REG_EXTENDED|REG_NOSUB) != 0) {
       return(0);
   }
   status = regexec(&re, string, (size_t) 0, NULL, 0);
   regfree(&re);
   if (status != 0) {
     return(0);
   }
   return(1);
}

int main () {

 int res = is_ip ("192.168.0.1");
 printf ("Result is %d\n", res);
 res = is_ip ("192.168.0");
 printf ("Result is %d\n", res);

}

май трябва да си прегледаш main()-a ;-), че програмата връща един и същи резултат независимо какво се подава или пък аз нещо неразбирам идеята.
Result is 1
Result is 0
Ъъъъъ, 1 и 0 един и същи резултат ли са? ;-)
Сигурно не си обърнал внимание, че първото извикване е с
192.168.0.1, а второто е
192.168.0

Само дето съм объркал коментара на is_ip (). Sorry. Връща 0 при грешка и 1 при успех...
:-)

cheers,
face


============================================================================
A mail-list of Linux Users Group - Bulgaria (bulgarian linuxers).
http://www.linux-bulgaria.org - Hosted by Internet Group Ltd. - Stara Zagora
To unsubscribe: http://www.linux-bulgaria.org/public/mail_list.html
============================================================================



 

наши приятели

 

линукс за българи
http://linux-bg.org

FSA-BG
http://fsa-bg.org

OpenFest
http://openfest.org

FreeBSD BG
http://bg-freebsd.org

KDE-BG
http://kde.fsa-bg.org/

Gnome-BG
http://gnome.cult.bg/

проект OpenFMI
http://openfmi.net

NetField Forum
http://netField.ludost.net/forum/

 

 

Linux-Bulgaria.ORG

Mailing list messages are © Copyright their authors.