![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 266 Pomógł: 0 Dołączył: 4.01.2007 Skąd: Szczecin Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Mam taki kod, którym próbuję wyciągnąć dane pomiędzy tym divem. Jednak w tym divie są inne divy i kończy "łapanie" na pierwszym napotkanym, zamykającym </div>. Jak mogę zrobić, aby rozpoznawało tag odpowiednio zamykający? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Łapy się obcina za parsowanie HTML przy pomocy RegEx...
Do tego są odpowiednie narzędzia np: http://simplehtmldom.sourceforge.net/ https://github.com/sunra/php-simple-html-dom-parser i wieeele innnych. |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 266 Pomógł: 0 Dołączył: 4.01.2007 Skąd: Szczecin Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za narzędzia! A tak dla samej wiedzy - jest jakaś magiczna sztuczka z regex, która to wyłapie?
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Przeczytaj jeszcze raz co napisałem
![]() ![]() |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 324 Pomógł: 105 Dołączył: 7.08.2012 Ostrzeżenie: (0%) ![]() ![]() |
W (.*?) masz łapanie leniwe (lazy, czyli łapanie najmniej jak się da), właśnie przez ten znak zapytania. Usuń go, a dopasowywanie zmieni się w zachłanne (greedy, dopasuj maksymalnie dużo).
Możesz też użyć modyfikatora U, który zmienia (odwraca) zachłanność wzoru, bez usuwania tego znaku zapytania. W wyniku wyrażenia regularnego nadal będziesz musiał pozbyć się nadliczbowych znaczników <div>. Ten post edytował kreatiff 10.11.2017, 15:43:58 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 460 Pomógł: 49 Dołączył: 5.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
W ogóle tu pojawia się pytanie, co z takimi przypadkami:
Klasa może być na wiele sposobów przypisana. Czy regex ma je wszystkie uwzględniać? Zatem w przypadku regex, trzeba wiedzieć, jaki to skomplikowany problem. Ten post edytował trzczy 10.11.2017, 16:34:44 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 324 Pomógł: 105 Dołączył: 7.08.2012 Ostrzeżenie: (0%) ![]() ![]() |
Można pominąć całkiem, skoro nie jest to w ogóle potrzebne: '#<div.*?>(.*?)</div>#is'.
ed. chyba. że chodzi ci o divy z tą konkretną klasą "mb", to wówczas można kombinować: '#<div.*?class=".*?mb.*?".*?>(.*?)</div>#is' Ale to może się okazać ślepym zaułkiem. Ten post edytował kreatiff 10.11.2017, 17:00:48 |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
ale Wy macie problem. RegExp NIE używa się do parsowania DOM - koniec kropka...
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 6 799 Pomógł: 1827 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
http://kawalekkodu.pl/post/the-tag-is-out-...domxpath-s01e01 -------------------- |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 266 Pomógł: 0 Dołączył: 4.01.2007 Skąd: Szczecin Ostrzeżenie: (0%) ![]() ![]() |
To może lepsze pytanie - które narzędzie wybrać?
DOMXPath, php-simple-html-dom-parser, phpquery lub inne? Które jest najaktualniejsze, ma wsparcie i najczęściej się używa? |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 6 799 Pomógł: 1827 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Klasy DOMDocument i DOMXPath bazują na rozszerzeniu libxml, który jest częścią kompilacji PHP (najczęściej jest). Czyli są naturalną częścią PHP. XPath ma na pewno większe możliwości niż SimpleHTMLDom, co do PHPQuery, to wydaje mi się, że jeśli chodzi o selektory, to ciut większe. Zapis XPath może być trochę zniechęcający, ale możliwości spore.
Ale to zależy od Ciebie. -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 20.06.2025 - 04:59 |