Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Patern za Regex Split

[es] :: .NET :: Patern za Regex Split

[ Pregleda: 2314 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Cola
Slađan Čolić
Banja Luka

Član broj: 23736
Poruke: 160
*.broadband.blic.net.

Sajt: www.knjigaimena.com


+5 Profil

icon Patern za Regex Split25.08.2010. u 23:22 - pre 166 meseci
Pišeem nekakav kod za parsiranje koda :) pa mi treba pattern za ovo što sledi
imam
Code:

string expression= @"Select *, a - b from nekaTabela /* komentar */ where a = 5 -- komentar 2";

kao što vidite u piranju je SQL, mada u suštini nije bitno šta je jer sam mislio da ga koristim za bilo koji kod
imam niz separatora po kojima bi trebao da razdvojim expression da dovijem tokene. Npr neka su separatori ' ' space,'+', '-', '*', '/' i ','zarez (neka zasad ostane na ovaim radi primjera)
htio bi da vidim kako bi izgledao pattern da se razbije po tim separatorima
Code:

string[] matchs = Regex.Split(expression, pattern);

to je lako
Code:

pattern = @"\s|\+|-|\*|/|,";

i dobijem matchs

'Select', '', '', '', 'a', '', '', 'b', 'from', 'nekaTabela', '', '', '', 'komentar', '', '', '', 'where', 'a', '=', '5', '', '', '', 'komentar2'
(nisam ignoriso prazne zato imam '')

međutim ja sam htio nešto drugo da dobijem, a to je da splitujem npr. po ovim ovde što sam naveo separatorima izuzev pojedinih kombinacija da ne gubim ove tokene npr (koji se u potpunosti ili djelomično sastoje od separatora)
'/*', '*/' i '--'
u kojima se ti separatori nalaze i sami
Code:

pattern = ????;

da dobojem matchs

'Select', '', '', '', 'a', '', '', 'b', 'from', 'nekaTabela', '/*', 'komentar', '*/', 'where', 'a', '=', '5', '--', 'komentar2'

znači da se vrši splitovanje po separatorima osim po nekim kombinacijama (kao u primjeru)
Pozdrav

PS pravo sam se pomučio da ovo lepo formatiram da shvatite šta je pisac hteo kasti (ako i tada skontate ;))


 
Odgovor na temu

Aleksandar Ružičić
Software Architect, Appricot d.o.o.
Beograd

Član broj: 26939
Poruke: 2881

Jabber: krckoorascic@gmail.com
Sajt: krcko.net


+44 Profil

icon Re: Patern za Regex Split26.08.2010. u 09:48 - pre 166 meseci
te stvari se ne rade regularnim izrazima (nije da ne mogu, samo onda ti izrazi postanu toliko komplikovani i ne citljivi da ih je tesko odrzavati) vec leksickom analizom, sto je u sustini veoma prosto.

konsultuj wikipediju i proguglaj malo za tutorijale ili gotova resenja, ako si lenj da ucis nesto zanimljivo :)
 
Odgovor na temu

sallle
Sasa Ninkovic
GTECH
Beograd

Član broj: 146
Poruke: 480
...148.91.adsl.dyn.beotel.net.

ICQ: 20785904


+4 Profil

icon Re: Patern za Regex Split26.08.2010. u 19:16 - pre 166 meseci
@Ruzic
Regularni izrazi se koriste za leksicku analizu (pretpostavljam da su i iz tog razloga smisljeni ). Potrazi na wikipeidiji "lex".

@cola

Probaj za /* */ komentare ovako neki regex
/[*](.|\s)*[*]/
a za --komentar probaj:
--.*$

Tako mozes da izbacis komentare. a za leksicku analizu, verovatno ne bi bilo loshe da nadjes negde sintaksnu definiciju sql-a. jer ako ces da pravis neki parser, moras poci od definicije...

Toplo preporucujem program pod nazivom "Expresso". besplatan je i super za testiranje regularnih izraza...
 
Odgovor na temu

[es] :: .NET :: Patern za Regex Split

[ Pregleda: 2314 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.