Как выбрать регулярным выражением скобки

Exillon

Новичок
Здравствуйте.
Дан например текст:
PHP:
function noname() {
 if(false){
 } else {
 }
}
function noname2() {
 if(false){
 } else {
 }
}
внутри функций может быть любое количество кода со скобками "{ }"

Как можно с помощью регулярки выбрать конкретно только внутренний код например функции "noname".
То есть можно ли как то указать что нужно выбрать все от открывающей до закрывающей скобки? или такую логику уже надо писать пхп код которые считает скобки и нужные вхождения?
Заранее спасибо.
 

AmdY

Пью пиво
Команда форума
покажи как пробовал. мы здесь помогаем, а не даём ответы, тем более про парные скобки-кавычки-брекеты уже не раз задавались вопросы, можно воспользоваться поиском.
 

freeek

Новичок
Да, можно было и поиском попользоваться

Не знаю, зачем это нужно, наверное так:


PHP:
  $text = 'function noname() {
//=====================================================================1
 if(false){
    //some cod 1
 } else {
 }
//=====================================================================1
}

function genPaging( $limit = 30, $total = 60, $page = 0 )
  {
//=====================================================================2
      $start = 1;
      $temp = floor( $limit / 2 );
      if (preg_match("/\bweb\b/i", "PHP is the web scripting language of choice.")) {
    echo "Вхождение найдено.";
} else {
    echo "Вхождение не найдено.";
}

if (preg_match("/\bweb\b/i", "PHP is the website scripting language of choice.")) {
    echo "Вхождение найдено.";
} else {
    echo "Вхождение не найдено.";
}
      return $out;
//=====================================================================2
  }


function noname2() {
//=====================================================================3
 if(false){
 } else {
     //some cod 2
 }
//=====================================================================3
}

function replaceAnchorsWithText($data) {
//=====================================================================4
    /**
     * Had to modify $regex so it could post to the site... so I broke it into 6 parts.
     */
    $regex  = \'/(<a\s*\'; // Start of anchor tag
    $regex .= \'(.*?)\s*\'; // Any attributes or spaces that may or may not exist
    $regex .= \'href=[\'"]+?\s*(?P<link>\S+)\s*[\'"]+?\'; // Grab the link
    $regex .= \'\s*(.*?)\s*>\s*\'; // Any attributes or spaces that may or may not exist before closing tag 
    $regex .= \'(?P<name>\S+)\'; // Grab the name
    $regex .= \'\s*<\/a>)/i\'; // Any number of spaces between the closing anchor tag (case insensitive)
    
    if (is_array($data)) {
        // This is what will replace the link (modify to you liking)
        $data = "{$data[\'name\']}({$data[\'link\']})";
    }
    return preg_replace_callback($regex, \'replaceAnchorsWithText\', $data);
//=====================================================================4
}

';

  preg_match_all( '%{(?:(?>[^{}])|(?R))*}%isU', $text, $m );
  echo '<pre>';
  print_r( $m );
 

xayam

Новичок
Как можно с помощью регулярки выбрать конкретно только внутренний код например функции "noname".
С помощью Reflection это можно сделать ? Сам не пробовал, поэтому не знаю...
 

AmdY

Пью пиво
Команда форума
нужно же задать главный вопрос жизни, вселенной и всего такого - А зачем тебе это нужно?
 

Exillon

Новичок
ну если так интересно -- У меня в проекте есть конструктор программного кода, ну вот нужно чтобы скрипт анализировал и изменял файлы с программным кодом, в частности добавлял или удалял методы классов.
 

tz-lom

Продвинутый новичок
ну если так интересно -- У меня в проекте есть конструктор программного кода, ну вот нужно чтобы скрипт анализировал и изменял файлы с программным кодом, в частности добавлял или удалял методы классов.
хреновейшее решение,воспользуйся наследованием или эмулируй traits
 

Exillon

Новичок
сори, не понял а причем там наследование классов вообще?
Может вы не совсем поняли задачу, Конструктор он редактирует файлы, не свои - чужие, он не знает что там будет и какой класс и какие методы, файл мог написать любой человек, он просто помогает его отредактировать - добавить изменить удалить методы. Класс этот даже не подключается это просто текстовый файл.
 

tz-lom

Продвинутый новичок
Exillon
ну и что?
юзер создаёт класс Userspace\UserClass
генератор делает Webspace\UserClass extends Userspace\UserClass и перекрывает нужные методы
да и всё равно непонятно нафига нужен такой конструктор , это же будут сплошные ошибки
P.S.
посмотрите на рефлексию,помоему она умела отдавать строки объявления ,хотя может я и ошибаюсь
 
Сверху