Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Preg match w sekcji.
Forum PHP.pl > Forum > Przedszkole
Gruchol
Witam,
Uczę się aktualnie wyrażeń regularnych i mam pewien problem.
Potrzebuję wyciągnąć wszystkie dane między:

  1. <section class="text-item">
  2. <h2>Dane</h2>

a pierwszym występującym znacznikiem </section>
Próbowałem to zrobić tak:
  1. <section (.*)>(.*)</section>

jednak nic to nie daje.
Co w takim przypadku należy zrobić?
Pozdrawiam.
b4rt3kk
Kropka odpowiada dowolnemu znakowi, nie będącemu znakiem nowej linii, tabulacją, itd. Musisz to po prostu uwzględnić w swoim patternie:

  1. <section (.*)>([.\s\t\r\n]*)</section>


Jeśli dalej nie działa, to dalej jest coś pominięte.

Ale po co się bawić w ten sposób wyrażęniem regularnym jak możesz użyć wbudowanego parsera xml/html?
Gruchol
Niestety, nadal nic nie wyświetla.
Wbudowanego parsera xml/html? Możesz jaśniej?
b4rt3kk
http://php.net/manual/en/book.dom.php
Gruchol
Kurczę, tylko dlaczego to wyrażenie co napisałeś wyżej nie działa?
Pyton_000
Regexp nie jest do parsowania HTML

Użyj tego: http://simplehtmldom.sourceforge.net/
trzczy
https://regex101.com/r/QRbzex/1/

Z flagą /s uwzględnia nowe linie zarówno preg_match jak i preg_match_all

Przeważnie jednak regex nie jest narzędziem do parsowania html. Wyjątkowo w niektórych sytuacjach owszem albo w krótkich zadaniach. Zatem potraktuj to jako czysty trening regex.
SmokAnalog
PHP DOMDocument nie wspiera HTML5, więc warto się posłużyć jakąś biblioteką. Fajną sprawą jest wspomniana przez Pytonka biblioteka PHP Simple HTML DOM Parser.

Żeby jej użyć, najlepiej zrób tak:

  1. Zainstaluj composer.
  2. Composerem w folderze projektu wywołaj w konsoli composer require sunra/php-simple-html-dom-parser
  3. Daj taki kod:
    1. require 'vendor/autoload.php';
    2.  
    3. $inputHTML = '...'; // do tej zmiennej wrzuć HTML o który chodzi
    4. $dom = SunraPhpSimpleHtmlDomParser::str_get_html($inputHTML);
    5. $outputHTML = $dom->find('.text-item')[0]->innertext;


    Tym magicznym sposobem, w zmiennej $outputHTML masz kod HTML wnętrzności pierwszego tagu z klasą "text-item". Chyba o to chodzi?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.