• 2 odgovora
  • 3.431 pregleda
Patern za Regex Split 25.08.2010. u 23:22 · pre 196 meseci #1
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 ;))

Potpis
http://www.knjigaimena.com
Re: Patern za Regex Split 26.08.2010. u 09:48 · pre 196 meseci #2
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 :)
Potpis
rafforum.rs - Forum Računarskog Fakulteta
Re: Patern za Regex Split 26.08.2010. u 19:16 · pre 196 meseci #3
@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...
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme