Ungreedy er for lidt, greedy for meget .. hva' gør man så ?
Jeg har følgende tekst:procedure main() {
identd_init("bot", "Win32");
identd_enable();
log($irc_software);
if (irc_connect("irc.de.quakenet.org", 6667, "myirc_bot")) {
alert("We got in!");
}
disconnect();
}
event on_num(331, 332) {
}
(\r\n og \t bliver fjernet inden regexp'en bliver udført)
Jeg skal så, med en regexp (håber jeg), matche hver funktion (dvs. (procedure|event) ..) og få "indholdet" af den.
Alt mellem den første { (efter ) ..) og indtil den sidste } der afslutter funktionen, skal matches som en submatch.
Mit nuværende pattern ser således ud (Microsoft RegExp / VBScript Regular Expressions 5.5)
"(procedure|event)) +([a-z_ ]+)\((.*?)\) +\{(.*?)\}"
Men problemet er, at den stopper med at matche ved den første } den møder. Hvilket f.eks. er afslutningen på en if () { .. } sætning.
Hvis jeg fjerner ? (undgreedy) fra (.*?) så matcher den bare hele teksten, og er den der giver den også problemer.
Ud fra ovenstående patternfår jeg f.eks. flg. som submatch for "procedure main"
procedure main() {identd_init("bot", "Win32");identd_enable();log($irc_software);if (irc_connect("irc.de.quakenet.org", 6667, "myirc_bot")) {alert("We got in!");}
Nogle der har en løsning ? Jeg vil helst undgå at parse for funktioner med Do..Loop / For..Next (VB)
Det gives kun point for en HEL løsning.
