Portál AbcLinuxu, 13. května 2025 22:03
Mam nasledujici problem Chci pouzit makra na sestaveni sloziteho regularniho vyrazu napr
#define TCAT(x,y) x()y
#define CAT(x,y) TCAT(x,y)
#define _ALPHA_ a-ZA-Z
#define _DIGIT_ 0-9
#define _ALPHADIGIT_ CAT(_ALPHA_,_DIGIT_)
vsechno funguje dokud se do hry nezapoji specialni znaky.Napr chci udelat
#define _UNRESERVED_ CAT(_ALPHA_,_DIGIT_)\\-\\.\\_\\~
coz spravne vyhazuje:
a-ZA-Z()0-9\-\.\_\~
jenomze pri vetsim zanoreni napr:
#define _GEN_DELIMS_ \\:\\\/\\?\\#\\[\\]\\@
#define _X_ CAT(_GEN_DELIMS_,_UNRESERVED_)
to uz haze chybu protoze to odparsuje ty "\". A protoze se jedna o regularni vyrazy, nemuzu vlozit misto konkatenace maker mezeru
Netusi nekdo jak by se to dalo vyresit?Řešení dotazu:
$ cat t.c
#define TCAT(x,y) x()y
#define CAT(x,y) TCAT(x,y)
#define _ALPHA_ a-ZA-Z
#define _DIGIT_ 0-9
#define _ALPHADIGIT_ CAT(_ALPHA_,_DIGIT_)
#define _UNRESERVED_ CAT(_ALPHA_,_DIGIT_)\\-\\.\\_\\~
#define _GEN_DELIMS_ \\:\\\/\\?\\#\\[\\]\\@
#define _X_ CAT(_GEN_DELIMS_,_UNRESERVED_)
_UNRESERVED_
_X_
$ gcc -E t.c -o -
# 1 "t.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "t.c"
# 10 "t.c"
a-ZA-Z()0-9\\-\\.\\_\\~
\\:\\\/\\?\\#\\[\\]\\@()a-ZA-Z()0-9\\-\\.\\_\\~
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.