WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Reg-Ex zum finden von Funktionen (http://www.wcm.at/forum/showthread.php?t=67980)

SNo0py 28.08.2002 12:49

Reg-Ex zum finden von Funktionen
 
Hallo RegEx-Profis,

ich will aus dem folgenden oder ähnlichen Strings
Code:

ok.ef = ok.de * mult * (4 - 2) / 2 + f.test1(3, f.test2())
so durchsuchen, dass f.test1(...) als Aufruf gilt und f.test2() als reiner Parameter.
Bei meinen bisherigen Versuchen wird immer die letzte Klammer "vergessen" ( [\w\.]+\(.*?\) ). Kann mir jemand sagen, wie ich dieses Problem löse?

Danke

käptn 28.08.2002 15:52

Warte mal...

wenn ich dich richtig verstanden habe, hast du ein "nested parentheses" Problem?
Also er matcht die ersten zwie Klammern, die zusammenpassen?

function(param, funcasparam())

Vielleicht hilft die das weiter:

\( ( (?>[^()]+) | (?R) )* \)

First it matches an opening parenthesis. Then it matches any number of substrings which can either be a sequence of non- parentheses, or a recursive match of the pattern itself (i.e. a correctly parenthesized substring). Finally there is a closing parenthesis.

HTH
~

SNo0py 28.08.2002 16:13

Puh, schaut ja wild aus... Danke, werd ich mir merken! Ich habs jetzt aber schon anders gelöst:

Code:

// search for next , or )
int p = 0; int c = 0;
for(int i = 0; i < Param.Count; i++)
{
        if((string)Param[i] == "(")        p ++;                // count (
        if((string)Param[i] == "," && p == 0)        // , found
        {
                // handle parameter
                c = i + 1;
        }
        if((string)Param[i] == ")" && p == 0)        // matching ) found
        {
                // handle last parameter (if any)

                lineStack.Add("fend");
                return true;
        }
        if((string)Param[i] == ")")        p --;                // count )
}

mfg, cu!

käptn 28.08.2002 18:32

ahhh...

Ich hab am Anfang gar net kapiert was die Func eigentlich macht - jetzt hat der Blitz eingschlagn :D

~


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag