Регулярка

Discussion in 'PHP' started by Trieg, 4 May 2009.

  1. Trieg

    Trieg Elder - Старейшина

    Joined:
    26 Oct 2007
    Messages:
    82
    Likes Received:
    9
    Reputations:
    0
    в файле есть кусок кода который мне надо выцепить..
    PHP:
        $template->assign(array(
            
    'PL_NAME' => $info['Name'],
            
    'PL_FOLDER' => $pl,
            
    'PL_CONFIG_COUNT' => ($totalconfig ) ? $totalconfig false,
            
    'PL_URL' => 'index.php?admin=config&n=edit&o=plugins&p='.$pl,
            
    'PL_DESCRIPTION' => (isset($info['Description'])) ? $info['Description'] : false,
            
    'PL_VERSION' => (isset($info['Version'])) ? $info['Version'] : false,
            
    'PL_DATE' => (isset($info['Date'])) ? $info['Date'] : false,
            
    'PL_AUTHOR' => (isset($info['Author'])) ? $info['Author'] : false,
            
    'PL_COPYRIGHT' => (isset($info['Copyright'])) ? $info['Copyright'] : false,
            
    'PL_COUNT_PART' => count($parts),
        ));
    цепляю так
    PHP:
    preg_match_all('#\$template\s*->\s*assign\s*\(\s*array\s*\((.+\s*=>\s*.+)\)\s*\)\s*;#Uis'$plugin_file_code$assign_vars);
    на выходе получаю
    PHP:
    Array
    (
        [
    0] => 
            
    'PL_NAME' => $info['Name'],
            
    'PL_FOLDER' => $pl,
            
    'PL_CONFIG_COUNT' => ($totalconfig ) ? $totalconfig false,
            
    'PL_URL' => 'index.php?admin=config&n=edit&o=plugins&p='.$pl,
            
    'PL_DESCRIPTION' => (isset($info['Description'])) ? $info['Description'] : false,
            
    'PL_VERSION' => (isset($info['Version'])) ? $info['Version'] : false,
            
    'PL_DATE' => (isset($info['Date'])) ? $info['Date'] : false,
            
    'PL_AUTHOR' => (isset($info['Author'])) ? $info['Author'] : false,
            
    'PL_COPYRIGHT' => (isset($info['Copyright'])) ? $info['Copyright'] : false,
            
    'PL_COUNT_PART' => count($parts),
    )
    по идее меня интересуют тока ключи массива.. можно ли при помощи 1 регулярки получить все ключи в виде
    PHP:
            Array
            (
                [
    0] => PL_NAME
                
    [1] => PL_FOLDER
                
    [2] => PL_CONFIG_COUNT
                
    [3] => PL_URL
                
    [4] => PL_DESCRIPTION
                
    [5] => PL_VERSION
                
    [6] => PL_DATE
                
    [7] => PL_AUTHOR
                
    [8] => PL_COPYRIGHT
                
    [9] => PL_COUNT_PART
            
    )
     
  2. MuXaJIbI4

    MuXaJIbI4 Member

    Joined:
    20 Nov 2008
    Messages:
    66
    Likes Received:
    7
    Reputations:
    0
    array_keys
     
  3. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Выделенный топик для регулярок - не интересно, надо обязательно засрать форум новыми темами.

    PHP:
    preg_match_all("~'([^']+)' =\>~i",$in,$out);
    print_r($out);
     
    _________________________
  4. Trieg

    Trieg Elder - Старейшина

    Joined:
    26 Oct 2007
    Messages:
    82
    Likes Received:
    9
    Reputations:
    0
    насчет топа тупанул.. бывает)
    MuXaJIbI4 а тебя не смущает что
    PHP:
            'PL_NAME' => $info['Name'], 
            
    'PL_FOLDER' => $pl
            
    'PL_CONFIG_COUNT' => ($totalconfig ) ? $totalconfig false
            
    'PL_URL' => 'index.php?admin=config&n=edit&o=plugins&p='.$pl
            
    'PL_DESCRIPTION' => (isset($info['Description'])) ? $info['Description'] : false
            
    'PL_VERSION' => (isset($info['Version'])) ? $info['Version'] : false
            
    'PL_DATE' => (isset($info['Date'])) ? $info['Date'] : false
            
    'PL_AUTHOR' => (isset($info['Author'])) ? $info['Author'] : false
            
    'PL_COPYRIGHT' => (isset($info['Copyright'])) ? $info['Copyright'] : false
            
    'PL_COUNT_PART' => count($parts),
    строка...

    Gifts, твоя регулярка вытянет ещё кучу мусора который мне не нужен.. мне надо тянуть только то что между $template->assign(array(.........));

    PS: решил проблему при помощи preg_replace и eval... но всеже интересно можно ли это сделать 1 махом не юзая eval
     
  5. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Одной не получится
    PHP:
    preg_match('~$template-\>assign\((.+?)\);~msi',$in,$tmp);
    preg_match_all("~'([^']+)' =\>~i",$tmp[1],$out);
    print_r($out);
     
    _________________________
  6. Red_Red1

    Red_Red1 Banned

    Joined:
    12 Jan 2007
    Messages:
    246
    Likes Received:
    258
    Reputations:
    83
    А вот это как вариант одной регуляркой
    PHP:
    $plugin_file_code='$template->assign(array(
            \'PL_NAME\' => $info[\'Name\'],
            \'PL_FOLDER\' => $pl,
            \'PL_CONFIG_COUNT\' => ($totalconfig > 0 ) ? $totalconfig : false,
            \'PL_URL\' => \'index.php?admin=config&n=edit&o=plugins&p=\'.$pl,
            \'PL_DESCRIPTION\' => (isset($info[\'Description\'])) ? $info[\'Description\'] : false,
            \'PL_VERSION\' => (isset($info[\'Version\'])) ? $info[\'Version\'] : false,
            \'PL_DATE\' => (isset($info[\'Date\'])) ? $info[\'Date\'] : false,
            \'PL_AUTHOR\' => (isset($info[\'Author\'])) ? $info[\'Author\'] : false,
            \'PL_COPYRIGHT\' => (isset($info[\'Copyright\'])) ? $info[\'Copyright\'] : false,
            \'PL_COUNT_PART\' => count($parts),
        ));'
    ;

    preg_match_all('#PL_[A-Z_]+?#Uis'$plugin_file_code$assign_vars);  
    echo 
    '<pre>';
    print_r ($assign_vars);
     
    2 people like this.