[ Cola @ 25.08.2010. 23:22 ] @
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 ;))

[ Aleksandar Ružičić @ 26.08.2010. 09:48 ] @
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 :)
[ sallle @ 26.08.2010. 19:16 ] @
@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...