• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

PHP- wyrażenia regularne

0 głosów
359 wizyt
pytanie zadane 3 czerwca 2020 w PHP przez Klaudiaaa Początkujący (390 p.)

Cześć!

Chciałabym za pomocą wyrażenia regularnego wyświetlić zawartość tabeli(wartosc1, wartosc2...).

Bardzo proszę o pomoc.

Mam taki kod:

<?php $content = '
    <table>
        <thead>
            <tr>
                <th tabindex="0">kolumna1</th>
                <th tabindex="0">kolumna2</th>
                <th tabindex="0">kolumna3</th>
            </tr>
        </thead> 
        
        <tbody>

            <tr>
                <td tabindex="0">wartosc1</td>
                <td tabindex="0">wartosc1</td>
                <td tabindex="0">wartosc1</td> 
            </tr>

            <tr>
                <td tabindex="0">wartosc2</td>
                <td tabindex="0">wartosc2</td>
                <td tabindex="0">wartosc2</td> 
            </tr>

        </tbody>
    </table>';

$classNames = ['<td tabindex="0">'];

$matches = [];

foreach( $classNames as $className ) {

    $pattern = sprintf('(.*?)', $className);

    preg_match("/{$pattern}/i", $content, $found);

    $matches[] = $found;

}

var_dump($found);

?>

 

1 odpowiedź

+3 głosów
odpowiedź 3 czerwca 2020 przez Comandeer Guru (607,960 p.)

Regexy nie służą do parsowania HTML-a. O wiele wygodniej jest użyć parsera HTML i wyciągnąć to, co potrzebujemy:

<?php
$html = '<table>
<thead>
	<tr>
		<th tabindex="0">kolumna1</th>
		<th tabindex="0">kolumna2</th>
		<th tabindex="0">kolumna3</th>
	</tr>
</thead>

<tbody>

	<tr>
		<td tabindex="0">wartosc1</td>
		<td tabindex="0">wartosc1</td>
		<td tabindex="0">wartosc1</td>
	</tr>

	<tr>
		<td tabindex="0">wartosc2</td>
		<td tabindex="0">wartosc2</td>
		<td tabindex="0">wartosc2</td>
	</tr>

</tbody>
</table>';

$dom = new DOMDocument();
$dom->loadHTML( $html );

$tbody = $dom->getElementsByTagName( 'tbody' )[ 0 ];
$cells = $tbody->getElementsByTagName( 'td' );
$content = [];

foreach( $cells as $cell ) {
	$content[] = $cell->nodeValue;
}

var_dump( $content );
?>

 

komentarz 3 czerwca 2020 przez Klaudiaaa Początkujący (390 p.)

Bardzo dziękuje za odpowiedź.

Ogólnie to chciałam pobrać z innej strony zawartość tabeli.

Zamiast kawałka HTML'a zrobiłam coś takiego:

$html = file_get_contents('https://link-do-strony');

Niestety teraz mam:

Warning: DOMDocument::loadHTML()

Czy jeśli chce pobrać zawartość z innej strony mogę użyć tego parsera HTML ?

komentarz 3 czerwca 2020 przez Comandeer Guru (607,960 p.)
A co dokładnie jest w tym warningu? Możliwe, że nie udało się pobrać zawartości tej strony.
komentarz 4 czerwca 2020 przez Klaudiaaa Początkujący (390 p.)

Dokładnie to:

Warning: DOMDocument::loadHTML(): Tag nav invalid in Entity, line: 54 in /opt/lampp/htdocs/dane/index.php on line 34

Kiedy dałam var_dump($html) wyświetliło mi się "string(112366)" i częściowo zawartość strony.

komentarz 4 czerwca 2020 przez Comandeer Guru (607,960 p.)

Wow, trochę żenada… Okazuje się, że wbudowany parser DOM w PHP nie obsługuje HTML5. Innymi słowy – jest niemal bezużyteczny :/

Najlepiej byłoby użyć jakiejś zewnętrznej biblioteki pokroju https://github.com/Masterminds/html5-php. Aczkolwiek wbudowany parser też powinien stronę sparsować, mimo tych ostrzeżeń (to jest głównie ostrzeżenie, że parser nie zna danego tagu). Spróbowałbym po prostu chamsko je wyciszyć:

@$dom->loadHTML( $html );

To powinno wyeliminować ostrzeżenie, ale równocześnie sprawić, że dokument będzie dalej parsowany w miarę poprawnie.

Podobne pytania

0 głosów
1 odpowiedź 404 wizyt
pytanie zadane 24 kwietnia 2018 w PHP przez Browarnik123 Użytkownik (830 p.)
0 głosów
1 odpowiedź 1,175 wizyt
+2 głosów
1 odpowiedź 312 wizyt
pytanie zadane 5 października 2020 w Inne języki przez apofix Początkujący (270 p.)

93,740 zapytań

142,675 odpowiedzi

323,294 komentarzy

63,319 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...