|
|
|
|
|
для: ween
(28.06.2008 в 16:22)
| |
preg_match_all('~class\\s+\\w+\\s*{\\s*(.*?)\\s*}\\s*(?=class|$)~si', $text, $matches);
|
Вообще подобная работа не для регулярных выражений, т.к. всех особенностей синтаксиса языка в 1 выражении учесть невозможно.
Лучше разобрать строку на лексемы и обрабатывать конечным автоматом:
preg_match_all('~\\w+|::|//|\\\\\\\\|\\|\\||&&|<=|>=|==|\\s+|[,.+\\-*/\\\\=(){}\\[\\]\'"|&#<>;]~', $text, $matches);
|
^^
неполный пример выражения | |
|
|
|
|
|
|
|
class A
{
public void Method1()
{
//
}
public void Method2() {}
}
class B
{
public void Method3()
{ // }
public void Method4() { }
}
|
Здравствуйте, существует строка(код написанный на языке C#), необходимо извлечь из нее все содержимое классов.
При первом прохождении должно быть получено:
public void Method1()
{
//
}
public void Method2() {}
При втором:
public void Method3()
{ // }
public void Method4() { }
Какой для этого необходимо задать регэксп?
Задаю вот так: {.*}
Результат: { public void Method1() { // } public void Method2() { } } class B { public void Method3() { // } public void Method4() { } }
Отключаю жадность: {.*?}
Результат получается до первой закрывающей фигурной скобки: { public void Method1() { // } | |
|
|
|
|