[ chemical brother @ 13.08.2012. 22:47 ] @
Pozdrav,,

danas sam naletio na jedan problem, i pokusavao sam ga rijesiti, ali bezuspjesno.


Naime, pretpostavimo da imamo sledeci string:


Hello World, this is an example {first} of regular expression {second} in this sentence.

Potrebno je sve sto nije {nesto} da se prebaci, recimo, u velika slova.

Dakle, nisu mi interesantni slucajevi u zagradama, vec van njih.

Unaprijed hvala
[ Burgos @ 13.08.2012. 23:11 ] @
Mislim da je najlakše zameniti sadržaj u zagradama sa praznim stringom - koliko se sećam, pronalaženje SVEGA OSIM nije zahvalan posao za regex.

Edit: Sada vidim da hoćeš da zameniš sve ostalo, a ne da izbaciš tekst.
[ chemical brother @ 13.08.2012. 23:49 ] @
Upravo tako, hocu da mi ostane tekst u zagradama onakav kakav jeste, a da sve ostalo ide velikim slovima.
[ Burgos @ 14.08.2012. 00:40 ] @
Onda ćeš istu brzinu, a potencijalno i veću, postići linearnim prolaskom kroz string i zamenom svega osim između { i }:

Code:
using System;
using System.Text;

namespace SampleNamespace
{
    public class SampleClass
    {
        public static void Main()
        {
            // Write hello world to the console
            String s = "Hello World, this is an example {first} of regular expression {second} in this sentence.";
            StringBuilder sb = new StringBuilder(s.Length);
            bool skip = false;
            for(int i = 0; i != s.Length; i++)
            {
                 if(skip)
                {
                     if(s[i] == '}')
                        skip = false;
                    sb.Append(s[i]);
                    continue;
                }
                if (s[i] == '{'){
                    skip = true;
                    sb.Append(s[i]);
                }
                else
                    sb.Append(Char.ToUpper(s[i]));
            }
    
            System.Console.WriteLine(sb.ToString());
        } // End of Main function (program statup)
    } // End of SampleClass
} // End of SampleNamespace


[Ovu poruku je menjao Burgos dana 14.08.2012. u 02:17 GMT+1]

[Ovu poruku je menjao Burgos dana 14.08.2012. u 02:18 GMT+1]
[ vujkev @ 14.08.2012. 01:00 ] @
Code:
([^{]*)(?:{[^}]*})*

ovo nalazi sve tekstove van {}. Valjda će ti pomoći
[ chemical brother @ 14.08.2012. 09:04 ] @
Citat:
vujkev
Code:
([^{]*)(?:{[^}]*})*

ovo nalazi sve tekstove van {}. Valjda će ti pomoći


Meni ovo nije radilo, ne znam da li si probao ovaj expression?
[ vujkev @ 14.08.2012. 10:42 ] @
Da, naravno. Probao u Expresso-u
[ chemical brother @ 14.08.2012. 12:46 ] @
Iskopirao sam tekst u RegExp Online Tester

i uzeo sam ovaj tvoj regular expression i dobio sam sledece:


Hello World, this is an example {first} of regular expression {second} in this sentence.

Dakle, izraz je podijelio tekst u 3 sekcije, shodno patternu, ali meni u tim dijelovima treba tekst bez patterna, dakle, patterne treba ignorisati.

Moguce je da ja negdje grijesim, ali ne vidim gdje.
[ peka @ 14.08.2012. 18:56 ] @
Treba ti druga grupa iz ovog Regex-a:
Code:
(^|})(([^{])*)


Npr (C#):
Code:

string s = "Hello World, this is an example {first} of regular expression {second} in this sentence.";

MatchCollection matches = Regex.Matches(s, "(^|})(([^{])*)");
foreach (Match m in matches)
{
    foreach (Capture c in m.Groups[2].Captures)
    {
        MessageBox.Show("'" + c.Value + "'");
    }
}