|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Jan 2008
Messaggi: 19
|
ESPRESSIONI REGOLARI: Estrazione dati complicata! La parola agli esperti..
Ragazzi ho un estrazione dati da codice HTML che mi sta facendo impazzire.. Devo estrarre dei dati da una tabella in una pagina html, ed ho creato una funzione apposita tramite le espressioni regolari, che fa il suo lavoro. Il fatto è che riesco ad estrarre gli argomenti in blocco, cioè tutto il blocco all'interno dei tag di tabella quando a me servirebbe estrarre i valori contenuti nei campi singolarmente. La tabella è molto carica di informazioni "spazzatura" e mi interessa isolare solo l'info effettivamente a me utile.
Mi spiego meglio direttamente tramite il codice: QUESTA è LA TABELLA Codice HTML:
<TABLE CLASS="menuplaintable" summary="This layout table holds the menu items"> <TR> <TD CLASS="mpdefault"> </TD> <TD CLASS="mpdefault"> <A HREF="/tsbss/pls/TEST/twbkwbis.P_GenMenu?name=bmenu.P_GenMnu" class=submenulinktext2 onMouseover="window.status='Personal Information'; return true" onMouseout="window.status=''; return true" onFocus="window.status='Personal Information'; return true" onBlur="window.status=''; return true" >Personal Information</A> <BR> <SPAN class=menulinkdesctext >View and update emergency contact information; Review name or social security number change information.</SPAN> </TD> </TR> <TR> <TD CLASS="mpdefault"> </TD> <TD CLASS="mpdefault"> <A HREF="/tsbss/pls/TEST/twbkwbis.P_GenMenu?name=bmenu.P_StuMainMnu" class=submenulinktext2 onMouseover="window.status='Student and Financial Aid'; return true" onMouseout="window.status=''; return true" onFocus="window.status='Student and Financial Aid'; return true" onBlur="window.status=''; return true" >Student and Financial Aid</A> <BR> <SPAN class=menulinkdesctext >Register for classes; Display your class schedule; View your holds; Display grades/transcripts; Review financial aid requirements/awards; <b>Charges/Payments/Refunds - Please view your account through the online Account Center. The link is located after you login to Braveweb but before you enter Banner Self Service.</b></SPAN> </TD> </TR> <TR> <TD CLASS="mpdefault"> </TD> <TD CLASS="mpdefault"> <A HREF="/tsbss/pls/TEST/twbkwbis.P_GenMenu?name=pmenu.P_MainMnu" class=submenulinktext2 onMouseover="window.status='Employee Information'; return true" onMouseout="window.status=''; return true" onFocus="window.status='Employee Information'; return true" onBlur="window.status=''; return true" >Employee</A> <BR> <SPAN class=menulinkdesctext >Time sheets, time off, benefits, leave or job data, paystubs, W4 data.</SPAN> </TD> </TR> </TABLE> Codice PHP:
ARRAY UNO: arrayurl conterrà i vari link nudi e crudi $arrayurl [0] = "/tsbss/pls/TEST/twbkwbis.P_GenMenu?name=bmenu.P_GenMnu"; $arrayurl [1] = "/tsbss/pls/TEST/twbkwbis.P_GenMenu?name=bmenu.P_StuMainMnu"; $arrayurl[2] ="/tsbss/pls/TEST/twbkwbis.P_GenMenu?name=pmenu.P_MainMnu" ; ARRAY DUE: arraytitoli conterrà i nomi associati ai link $arraytitoli [0] = "Personal Information"; $arraytitoli [1] = "Student and Financial Aid"; $arraytitoli [2] = "Employee"; ARRAY TRE: arraydescrizioni conterrà le tre descrizioni delle pagine a cui puntano i link. $arraydescrizioni [0] = "View and update emergency contact information; Review name or social security number change information." $arraydescrizioni [1] = "Register for classes; Display your class schedule; View your holds; Display grades/transcripts; Review financial aid requirements/awards; <b>Charges/Payments/Refunds - Please view your account through the online Account Center. The link is located after you login to Braveweb but before you enter Banner Self Service."; $arraydescrizioni [2] = "Time sheets, time off, benefits, leave or job data, paystubs, W4 data."; Come fareste per isolare questi valori singolarmente cosi come li ho proposti in quel caos di tag e codice html mal scritto che è in quella tabella? ![]() ![]() |
![]() |
![]() |
![]() |
#2 |
Bannato
Iscritto dal: Nov 2002
Città: Roma
Messaggi: 810
|
Innanzitutto, se fai sovrascrivere $Result ad ogni ciclo alla fine vedrai solo l'ultimo risultato, quindi già quello è sbagliato. Meglio dapprima inizializzare un array con "$Result = array()" e poi usare "$Result[] =" per aggiungere i valori della regex che fai ciclare nella while.
Per ricavare le url puoi usare: $regexp = "|<TD CLASS=\"mpdefault\">\n<A HREF=\"([^\"]+)\"|"; preg_match_all($regexp,$page,$matches,PREG_SET_ORDER); $Result = array(); foreach ( $matches as $match ) { $Result[] = $match[1]; } Puoi verificarne il funzionamento con: print_r($Result); Con lo stesso modo di concepire la regex puoi facilmente ricavare gli altri due valori. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:20.