Здравствуйте, помогите, пожалуйста, с регулярными выражениями.
У меня есть файл со следующим содержимым:
/*
* GenerateTocXML.java
* Copyright © 1999, 2003 Slava Pestov
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
package doclet;
import com.sun.javadoc.*;
import com.sun.tools.doclets.standard.Standard;
import java.io.*;
import java.util.Arrays;
public class GenerateTocXML
{
public static final String OUT =
"toc.xml";
public static final String HEADER =
"<?xml version='1.0'?>\n<TOC>\n"
+
"<ENTRY HREF='overview-summary.html'><TITLE>jEdit API Reference</TITLE>";
public static final String FOOTER =
"</ENTRY></TOC>\n";
public static boolean start
(RootDoc root
)
{
if (!Standard.
start(root
))
{
return false;
}
try
{
FileWriter out =
new FileWriter(Standard.
htmlDoclet.
configuration().
destDirName + OUT
);
out.
write(HEADER
);
PackageDoc
[] packages = root.
specifiedPackages();
for(int i =
0; i < packages.
length; ++i
)
{
processPackage
(out,packages
[i
]);
}
out.
write(FOOTER
);
out.
close();
return true;
}
catch(IOException e
)
{
e.
printStackTrace();
return false;
}
}
public static int optionLength
(String option
)
{
return Standard.
optionLength(option
);
}
public static boolean validOptions
(String[][] options, DocErrorReporter reporter
)
{
return Standard.
validOptions(options,reporter
);
}
public static LanguageVersion languageVersion
()
{
return Standard.
languageVersion();
}
private static void processPackage
(Writer out, PackageDoc pkg
)
throws IOException
{
out.
write("<ENTRY HREF='");
String pkgPath = pkg.
name().
replace('.',
'/') +
"/";
out.
write(pkgPath
);
out.
write("package-summary.html'><TITLE>");
out.
write(pkg.
name());
out.
write("</TITLE>\n");
ClassDoc
[] classes = pkg.
allClasses();
String[] classNames =
new String[classes.
length];
for(int i =
0; i < classes.
length; i++
)
{
classNames
[i
] = classes
[i
].
name();
}
Arrays.
sort(classNames
);
for(int i =
0; i < classes.
length; i++
)
{
processClass
(out,pkgPath,classNames
[i
]);
}
out.
write("</ENTRY>");
}
private static void processClass
(Writer out,
String pkgPath,
String clazz
)
throws IOException
{
out.
write("<ENTRY HREF='");
out.
write(pkgPath
);
out.
write(clazz
);
out.
write(".html'><TITLE>");
out.
write(clazz
);
out.
write("</TITLE>\n");
out.
write("</ENTRY>");
}
}
В этом файле мне нужно, чтобы компьютер нашел содержимое функций.
Например, для функции
public static int optionLength(String option)
{
return Standard.optionLength(option);
}
получить
return Standard.optionLength(option);
И так для каждой функции в файле.
Я просто не могу понять, как нужно написать выражение, чтобы нашло закрывающую скобку функции.
Я пытаюсь написать следующее,
/.*public.*\(.*\)\s*{(.*)}/
Я стыкаюсь с тем, что символ . учитывает любой символ, кроме пробельного. (я сделала такой вывод)Потому что если я пишу /.*public.*\(.*\)\s*{\s*(.*)\s*}/, то мне находит
[1] => Array
(
[0] => return Standard.optionLength(option);
[1] => return Standard.validOptions(options,reporter);
[2] => return Standard.languageVersion();
)
Но прописывать конкретное выражение под каждую функцию мне не подходит. Так как мне нужно универсальная регулярка, которая определяет тело функции.
Как я только не пробовала и не получается. У меня просто будет много таких файлов(больше 200) и в каждом файле будет много функций, и у каждой разное тело.