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