[ dontoo @ 04.04.2010. 11:47 ] @
Kako napraviti greedy OR (|)? Ako je ovo dio string (string ima još drugih karaktera koje moram ignorirat) ...21xy32... Ja želim ubacit znak(sa razmakom) ' * ' između broja i slova \d[a-z], između slova i broja[a-z]\d i između slova i slova [a-z][a-z]
Code:
        Regex reg = new Regex(@"\d[a-z]|[a-z]\d|[a-z][a-z]");//23x   y +3xy - 34 x   y -5 x    y + 34 x y34+ x2y4
        MatchCollection matchC;
        matchC = reg.Matches(input);
        int ii = 0;
        foreach (Match element in matchC)
        {
            input = input.Insert(element.Index + ii, " * ");
            ii += 3;
        }


Ovaj kod ne funkcionira zato što regex \d[a-z]|[a-z]\d|[a-z][a-z] koristi operator | koji uvijek bira između dvije alternative. Sad kad on naiđe na 3xy trebao bi napisati 3*x*y, ali on gleda 3-x | x-y. Kako 3-x je true on više negleda drugi izbor. Kako ga napravit greedy? Da gleda ili ovo ili ono ili oba? Mučim se već sat vremena, ne mogu vjerovat da na netu nema ništa o tome.
[ dontoo @ 04.04.2010. 17:22 ] @
Riješeno
Regex reg = new Regex(@"(\d(?=[a-z])|[a-z](?=[a-z\d]))");