Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Dziwny problem z preg_match, nie filtruje wszystkiego
Forum PHP.pl > Forum > Przedszkole
mlody69
Witam,
chcę z pewnej strony pobrac id divów które wyglądają tak:
  1. <div class="active" id="numer">

I takich divów jest kilkanaście. Mój problem polega na tym, że preg_match_all nie zwraca wszystkich tylko przykładowo na 20 tylko 11 i nie pierwsze 11 tylko jakieś 'losowe'.
Tablica wygląda tak:
  1. Array ( [0] => Array ( [0] =>
  2. [1] =>
  3. [2] =>
  4. [3] =>
  5. [4] =>
  6. [5] =>
  7. [6] =>
  8. [7] =>
  9. [8] =>
  10. [9] =>
  11. [10] =>
  12. [11] =>
  13. ) [1] => Array ( [0] => 1777 [1] => 1783 [2] => 1789 [3] => 1792 [4] => 1793 [5] => 1794 [6] => 1800 [7] => 1801 [8] => 1795 [9] => 1796 [10] => 1797 [11] => 1799 ) )

A powinny być numery od 1777-1801
Mój kod wyglada następujaco:
  1. preg_match_all('#<div id="(.*)" class="item active">#is', $html, $id);
Noidea
http://gajdaw.pl/php/wyrazenia-regularne-p...torial/p15.html


lub przy pomocy DOM + XPath
mlody69
Dzieki za odpowiedź, po przeczytaniu tego zrobiłęm coś takiego:
  1. preg_match('#<div id="(.*?)" class="active">#', $html, $id);

I to wywala tylko jedno ID.
Noidea
Z linku który podałem wyżej miałeś wyciągnąć tylko informacje o zachłanności w wyrażeniach regularnych. Czyli różnicę pomiędzy .* a .*?

Funkcję powinieneś zostawić taką jaką miałeś, czyli preg_match_all
mlody69
Wtedy wywala tylko Array ( [0] => Array ( ) [1] => Array ( ) )

Poddaje się, długo juz z tym kombinuję i nie potrafie wyciągnąc tego id divów które mają class="active">. Jeżeli mi ktoś pomoże będe bardzo wdzięczny
amii
Daj wyświetlanie:
foreach ($id as $value) {
echo $value[1]; //pobierasz pierwsza dopasowania w nawiasach
}
mlody69
Tak, ale tak czy siak nie pobiera wszystkich ID
amii
  1. preg_match_all('#<div id="(.*?)" class="item active">|<div class="item active" id="(.*?)" #is', $html, $id);
  2.  
  3. foreach ($id as $value) echo $value[1];

?
mlody69
  1. preg_match_all('#<div id="(.*?)" class="item active">|<div class="item active" id="(.*?)" #is', $aukcje, $id);
  2. print_r($id);

Wypluwa kod html a tylko gdzies w środku przy jednym wywala id.
cycofiasz
Podeślij link do strony z której chcesz to wyłuskać bo podajesz różne warianty kodu i nie wiadomo jaki regex napisać
mlody69
Jest ona dostępna tylko po zalogowaniu więc wrzucam tutaj:
http://pastebin.pl/764cd0333c742a2df04fd24d73cc1513
A chce wyciągnąć:
<div id="ta wartosc" class="item active">
cycofiasz
  1. preg_match_all('#<div id="([0-9]+)" class="item active">#i',$html,$a);
  2. print_r($a[1]);
mlody69
Dzięki, ale to zwraca 11 elementów a powinno być 18.
  1. Array ( [0] => 1783 [1] => 1792 [2] => 1793 [3] => 1794 [4] => 1800 [5] => 1801 [6] => 1795 [7] => 1796 [8] => 1799 [9] => 1802 [10] => 1804 )
cycofiasz
U mnie zwraca 18 z tego źródła co podałeś
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.