Portál AbcLinuxu, 13. května 2025 22:03

Dotaz: regularni vyrazy a makra

24.2.2011 13:28 midnighter
regularni vyrazy a makra
Přečteno: 221×
Odpovědět | Admin

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:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

24.2.2011 13:35 JS
Rozbalit Rozbalit vše Re: regularni vyrazy a makra
Odpovědět | | Sbalit | Link | Blokovat | Admin
Mozna ty podvyrazy strcit do uvozovek a vyuzit toho, ze C konkatenuje retezove literaly?
24.2.2011 14:20 chochi | skóre: 29 | Praha
Rozbalit Rozbalit vše Re: regularni vyrazy a makra
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nejake nechapu kde je problem:

$ 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\\-\\.\\_\\~

Řešení 1× (midnighter (tazatel))
25.2.2011 07:58 midnighter
Rozbalit Rozbalit vše Re: regularni vyrazy a makra
Odpovědět | | Sbalit | Link | Blokovat | Admin
[VYRESENO] Tak problem jsem nakonec vyresil tim ze sem makra dal do retezcu a nechal je konkatenovat. Diky za tip.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.