[ bobby63 @ 29.02.2012. 15:17 ] @
Treba da izvrsim neki ogromn set SQL comandi, velicine oko 80kb. Posto iz nekog razloga MySQL (klijent trazi stari MySQL 3.23) connector ne moze da prihvati ovoliki string dobio sam savet da radim parse i izvlacim komandu po komandu.

Nakon pretrage sam dosao do zakljucka da je najbolje da koristim regex ali iz nekog razloga nikako ne mogu da ga nateram da radi.
String je na primer:
Code:
SQLcommand = "bla bla START ovde nesto END bla bla"
i ja hocu da izbrisem sve od START do END i za to koristim komandu:
Code:
SQLcommand = Regex.Replace(SQLcommand, "START*END", " ");
Nakon ovoga se ne desava apsolutno nista.
Ako izvrsim na primer:
Code:
SQLcommand = Regex.Replace(SQLcommand, "START", "end");
onda se radi.
Pitanje je zasto ne radi *, treba li nekako drugacije da definisem ovo?

Pozdrav svima i unapred hvala.
[ sallle @ 29.02.2012. 15:41 ] @
treba da stoji: .*
i pogledaj, da podesis (ne znam sad kako se zove taj property), da ti na first occurence of END upari taj regex, da ne ide do poslednjeg END-a slucajno.
[ mulaz @ 29.02.2012. 15:45 ] @
Citat:
sallle: treba da stoji: .*
i pogledaj, da podesis (ne znam sad kako se zove taj property), da ti na first occurence of END upari taj regex, da ne ide do poslednjeg END-a slucajno.


.*?
:) (jos upitnik da postaje non-greedy)
[ bobby63 @ 29.02.2012. 19:13 ] @
E hvala puno radi ovo. Samo jos dva pitanja.

1.Kako da prosirim uslov da hvata vise linije?
Tj uslov sada radi ali samo ako je sve u istoj liniji
ali ne i ako je pocetak u jednoj a kraj u nekoj sledecoj liniji?

2. Kako da upotrebim Escape karakter, na primer
\* bi trebalo da bude * ali program prijavljuje gresku?

[ sallle @ 29.02.2012. 19:32 ] @
* mozes da escapujes koristeci: [*]
taj regex.replace ima overload kome se kao parametar navode neke opcije (flagovi), mislim da tu imas da podesis multiline (pa ti onda . vazi i za \n\r karaktere)...
[ bobby63 @ 29.02.2012. 19:34 ] @
Pod 2 sam provalio treba \\*, bolesne li sintaxe a i uputstva po netu su katastrofa.

Provalio sam i pod jedan da ima overload sa flagovima.
Treba da stoji RegexOptions.SingleLIne sto je pisac hteo da kaze da posmatra string kao jednu liniju
Code:
SQLcommand = Regex.Replace(SQLcommand, "Nesto", "", RegexOptions.Singleline);

Hvala Puno.

[Ovu poruku je menjao bobby63 dana 29.02.2012. u 20:46 GMT+1]
[ mmix @ 29.02.2012. 20:19 ] @
Ne zaboravi da c# parser prvi vidi tvoj string a on isto podrzava escape sekvence, tako da string koji ti vidis nije string koji size do regex-a.
Dakle ili koristis "\\*" ili iskljucis c# compiler escaping sa @, tj @"\*". Ja licno vise koristim @, onda mogu da naveem konkretan regex string bez bojazni.

[ bobby63 @ 29.02.2012. 21:39 ] @
Hvala puno, zbunjivalo me sto po netu svuda pise \* a nigde \\*.
U medjuvremenu sam provalio da ima i
Code:
string daVidimoKakoToIzgleda = Regex.Escape("*");
pa tu proveravam bez ikakve nedoumice sta regex ocekuje.
Jos jednom hvala, ne bih se snasao bez pomoci a evo vec sam napravio ovej parser da radi ispravno.
[ mulaz @ 01.03.2012. 01:21 ] @
Citat:
bobby63: Hvala puno, zbunjivalo me sto po netu svuda pise \* a nigde \\*.



\* -> znaci "*" (matchuje tamo gde je jedna zvezdica)
\\* -> znaci 0 ili vise "\" znakova (znaci "\" *-puta)