Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Preg match w sekcji.
Gruchol
post 9.03.2018, 19:00:26
Post #1





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 28.11.2014

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Gruchol 9.03.2018, 19:31:29
Go to the top of the page
+Quote Post
b4rt3kk
post 9.03.2018, 19:27:36
Post #2





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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?

Ten post edytował b4rt3kk 9.03.2018, 19:28:43


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
Gruchol
post 9.03.2018, 19:32:17
Post #3





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 28.11.2014

Ostrzeżenie: (0%)
-----


Niestety, nadal nic nie wyświetla.
Wbudowanego parsera xml/html? Możesz jaśniej?
Go to the top of the page
+Quote Post
b4rt3kk
post 9.03.2018, 19:38:39
Post #4





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

Ostrzeżenie: (0%)
-----


http://php.net/manual/en/book.dom.php


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
Gruchol
post 9.03.2018, 19:49:04
Post #5





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 28.11.2014

Ostrzeżenie: (0%)
-----


Kurczę, tylko dlaczego to wyrażenie co napisałeś wyżej nie działa?
Go to the top of the page
+Quote Post
Pyton_000
post 9.03.2018, 20:07:10
Post #6





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Regexp nie jest do parsowania HTML

Użyj tego: http://simplehtmldom.sourceforge.net/
Go to the top of the page
+Quote Post
trzczy
post 9.03.2018, 21:45:09
Post #7





Grupa: Zarejestrowani
Postów: 460
Pomógł: 49
Dołączył: 5.06.2011

Ostrzeżenie: (0%)
-----


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.

Ten post edytował trzczy 9.03.2018, 21:46:17
Go to the top of the page
+Quote Post
SmokAnalog
post 9.03.2018, 22:18:39
Post #8





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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?


Ten post edytował SmokAnalog 9.03.2018, 22:28:30
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.04.2024 - 19:27