Ottieni il testo tra tag HTML

Ok, questa è una domanda piuttosto semplice, ma sono nuova a PHP e non sono stata in grado di capirlo. La stringa di input è $ data im cercando di continuare a tirare e utilizzare solo la prima corrispondenza. Il seguente è errato? Questo potrebbe non essere il modo migliore per eseguire l’azione, sto solo cercando di estrarre il contenuto tra due tag html (primo set trovato) e scartare il resto dei dati. So che ci sono domande simili, le ho lette tutte, la mia domanda è un mix, se c’è un modo migliore per farlo e come posso definire la partita come nuovo input per il resto del codice rimanente. Se cambio $ corrisponde a $ data2 e lo utilizzo da lì in poi restituisce errori.

preg_match('/

(.*?)/s', $data, $matches);

L’utilizzo di espressioni regolari è generalmente una buona idea per il tuo problema.

Quando guardi http://php.net/preg_match vedi che le partite $ saranno un array, poiché potrebbero esserci più di una partita. Provare

 print_r($matches); 

per avere un’idea di come appare il risultato e quindi scegliere l’indice giusto.

MODIFICARE:

Se c’è una corrispondenza, puoi ottenere il testo estratto tra la parentesi-gruppo con

 print($matches[1]); 

Se avessi più di una parentesi-gruppo, sarebbero numerati 2, 3, ecc. Dovresti considerare il caso anche quando non c’è corrispondenza, nel qual caso la matrice avrà la dimensione di 0.

Non analizzare HTML tramite preg_match , usa invece questa class PHP:

La class DOMDocument

Esempio:

 hi

H1 title

H2 title

H2 title

"; // a new dom object $dom = new domDocument('1.0', 'utf-8'); // load the html into the object $dom->loadHTML($html); //discard white space $dom->preserveWhiteSpace = false; $hTwo= $dom->getElementsByTagName('h2'); // here u use your desired tag echo $hTwo->item(0)->nodeValue; //will return "H2 title"; ?>

Riferimento

Potresti farlo in questo modo ::

 $h1 = preg_replace('/]*?>([\\s\\S]*?)<\/h1>/', '\\1', $h1); 

Questo rimuoverà o rimuoverà il TESTO dai tag HTML