Этот сайт не наркоманов. Это сайт программистов.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Пыха переехала на новый сервер, ура!

Краснодарское время: 25 Май, 2012, 11:30:30

Страниц: [1]
Печать
Автор Тема: PHP. Поиск тела функции. Регулярка  (Прочитано 84 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Ladari    ↓ 
16 Январь, 2012, 09:44:06
НЕ ХУЕТА! ХУЕТА!

Карма: 0
Сообщений: 1
Сила слова: 0

Здравствуйте, помогите, пожалуйста, с регулярными выражениями.
У меня есть файл со следующим содержимым:
Java
/*
* 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) и в каждом файле будет много функций, и у каждой разное тело.
Записан
Stasovsky    ↓ 
16 Январь, 2012, 10:21:12 , спустя 37 минут 6 секунд
НЕ ХУЕТА! ХУЕТА!

Сенсей XD
Группа: Джедаи

Карма: 54
Сообщений: 3654
Сила слова: 1.48

Я просто не могу понять, как нужно написать выражение, чтобы нашло закрывающую скобку функции.
Text
[^}]
Записан
Страниц: [1]
Печать
 

Перейти в: