Visualizzazione dei risultati da 1 a 4 su 4

Discussione: preg_match ricorsiva

  1. #1
    Utente di HTML.it L'avatar di brodik
    Registrato dal
    Jan 2009
    Messaggi
    765

    preg_match ricorsiva

    salve a tutti, avrei bisogno di un aiuto su questa funzione ricorsiva:

    Codice PHP:
    $se_info['current_t'] = 0;

    function 
    search_here($page){
        global 
    $se_info;

        if(
    preg_match("#<table.*?class=\"main_content\">.*?</table>#i"$page$array))
            
    preg_match_all("#<td class=t><b title=\"(.*?)\"><a.*?\?t=(\d*).*?>#i"$array[0], $trk);

        
    $glob array_create($trk);// questa funzione riordina l'array impostando gli indici con valore progressivo a $se_info['current_t']

        
    $se_info['current_t'] += count($trk[0]); // imposta gli indici in array_create() per la funzione ricorsiva

        
    if(($se_info['current_t'] < $se_info['t']) && ($se_info['current_t_page'] < $se_info['pages'])){//$se_info['t'] è estratto da un'altra funzione e rappresenta il numero totale di records, $se_info['pages'] è estratto da un'altra funzione e rappresenta il numero totale di pagine presenti
            
    ++$se_info['current_t_page'];
            
    $search_query = array("page" => array("st" => "search_editbox"));
            
    $page back_to_basic($search_query$se_info['current_t_page']);// mediante curl prendo il codice sorgente della pagina successiva se presente o neccessaria

            
    search_here($page);// ricorsione 
        
    }

        
    //return;


    mi restituisce l'errore "Undefined variable: trk ... on line 56 ( la riga $glob = array_create($trk); ),

    anche con un semplice count($trk); restituisce l'errore

    ovviamente l'errore è dato al momento della ricorsione (ossia il primo set di risultati me li processa correttamente, il secondo no)

    da cosa può dipendere?

    p.s.: l'espressione regolare non è corretta in quanto il tag PHP mi toglie alcuni slash

  2. #2
    Utente di HTML.it L'avatar di brodik
    Registrato dal
    Jan 2009
    Messaggi
    765
    facendo un po' di prove in locale sembra che sia colpa di
    Codice PHP:
    if(preg_match("#<table.*?class=\"main_content\">.*?</table>#i"$page$array)) 
    che non trova riscontro nel sorgente della pagina 2, ma in verità c'è!

    è normale tutto cio'?

  3. #3
    Utente di HTML.it L'avatar di brodik
    Registrato dal
    Jan 2009
    Messaggi
    765
    posto il fatto curioso di cui mi sono accorto:

    non funziona
    Codice PHP:
     if(preg_match("#<table.*?class=\"main_content\">.*?</table>#i"$page$array)) 
    funziona
    Codice PHP:
     if(preg_match("#<table.*?class=\"main_content\">.*</table>#i"$page$array)) 
    nessuno sa aiutarmi?

  4. #4
    Secondo me dovresti impostare nella RegExp anche l'opzione S, per permettere al preg_match di leggere su più righe!
    Poi, manca un carattere di escape nella parte finale.
    Inoltre inserirei una parte del codice tra parentesi!

    Codice PHP:
    $regexp "#<table.*?class=\"main_content\">(.*?)<\\/table>#is"
    Una domanda mi nasce spontanea.
    Ma se sai che nelle pagine in cui cerchi di applicare questo script, c'è sempre una tabella di nome main_content, perché usi una espressione regolare così complessa???
    Non potresti riscriverla come segue??

    Codice PHP:
    $regexp "#<table class=\"main_content\">(.*?)<\\/table>#is"
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.