[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Регулярные выражения для поиска тела функции
Ladari
Здравствуйте, помогите, пожалуйста, с регулярными выражениями.
У меня есть файл со следующим содержимым:
/*
* 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);

И так для каждой функции в файле.
Я просто не могу понять, как нужно написать выражение, чтобы нашло закрывающую скобку функции.

 ! 

М
Выделяйте свой код тегами!
Winston




Спустя 6 минут, 41 секунда (16.01.2012 - 05:01) inpost написал(а):
Ladari
На ПХП?! Показывай свои попытки.

Спустя 18 минут, 51 секунда (16.01.2012 - 05:20) Ladari написал(а):
Я пытаюсь написать следующее,
/.*public.*\(.*\)\s*{(.*)}/
Я стыкаюсь с тем, что символ . учитывает любой символ, кроме пробельного. (я сделала такой вывод)Потому что если я пишу /.*public.*\(.*\)\s*{\s*(.*)\s*}/, то мне находит
[1] => Array
(
[0] => return Standard.optionLength(option);
[1] => return Standard.validOptions(options,reporter);
[2] => return Standard.languageVersion();
)
Но прописывать конкретное выражение под каждую функцию мне не подходит. Так как мне нужно универсальная регулярка, которая определяет тело функции.
Как я только не пробовала и не получается. У меня просто будет много таких файлов(больше 200) и в каждом файле будет много функций, и у каждой разное тело.

Спустя 24 минуты, 38 секунд (16.01.2012 - 05:44) Ladari написал(а):
Эх..не получается((

Спустя 4 часа, 6 минут, 16 секунд (16.01.2012 - 09:51) Winston написал(а):
preg_match_all("#(?:private|protected|public).*\(.*\)\s*\{(.*)\}#isU", $code, $match);
echo '<pre>'.print_r($match, 1).'</pre>';
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.