Regularni vyrazy v glibc

Michal Krause mike na navrcholu.cz
Úterý Září 14 21:52:07 CEST 1999


Dne 14. 9. 1999 David Kuzela napsal:

> narazil jsem na problem ktery nechapu. Experimentoval jsem s
> regexpy v Cecku a zjistil, ze mam-li stringy:
> 
> char s1[]="nejaka hezka {hlaska}",
>      s2[]=".*a[ \t].* {Hlaska}",
>      s3[]=".*a[ \t].* {hla{1,3}ska}";
> 
> pak po zkompilovani s2 i s3 (s flagem REG_EXTENDED) souhlasi
> s s1. Pokud se pokusim pouzit \{1,3\}, dozvim se, ze:
> 
>    unknown escape sequence `\}'
> 
> Result:
> => pokud pouziji uvnitr {} pismena jde o normalni znaky, pokud
> jsou tam cisla, jde o soucast masky. Otazka je nasnade. Jak 
> tedy zadat shodu s retezcem s1[]="{1,5}" bez pouziti metaznaku?
> 
> To, ze se gcc nezna k '\}' si navic protireci s dokumentaci 
> (info libc), kde se pise:
> 
>    `REG_BADBR'
>         There was an invalid `\{...\}' construct in the regular
>         expression.  A valid `\{...\}' construct must contain either a
>         single number, or two numbers in increasing order separated by a
>         comma.

Uprimne receno prilis problem nechapu, ale pokud chcete pouzit retezcovou
konstantu, obsahujici sekvenci \{ nebo \}, musite ji zapsat ve zdrojaku
takto: 

\\{ resp. \\}

jinak neprojde kompilerem se zminovanou hlaskou. Za backslashem v retezcove
konstante mohou byt v C pouze znaky n, r, t, f, b, a, \, ', 0, x nebo X 
(snad jsem na zadny nezapomnel).

S pozdravem

Michal Krause                                                      /\
ICQ: 7665279            Informace (nejenom) ze sveta Linuxu     /\/  \
email: mike na navrcholu.cz ______ http://www.root.cz/ ______ NAVRCHOLU.cz

Co napsat do signatury, aby to nikoho nepohorsilo? Snad jedine nejakou
obecne znamou pravdu. Doufam, ze vsichni vite, ze tucnak je bylozrava ryba. 



Další informace o konferenci Linux