Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]preg_match_all - wyciągnięcie danych.
Forum PHP.pl > Forum > Przedszkole
Largo1234
Witam, szukam sposobu na wyciagniecie danych ze znacznikow html
oto przykładowy link:
  1. <div class="vid" onclick="loadVideo($(this));" data-id="VuNIsY6JdUw"><a href="https://www.youtube.com/watch?v=VuNIsY6JdUw"></a><div><h3>You Belong with Me<br><span>Taylor Swift</span></h3></div></div>

zalezy mi na tym co jest w data-id, pomiędzy <h3> oraz to co pomiedzy <span> czyli anologicznie:
  1. $id='VuNIsY6JdUw';
  2. $utwor='You Belong with Me';
  3. $wykonawca='Taylor Swift';

to co znajduje sie w href bylo by pomijane ponieważ ten link sie zmienia, a nie jest mi on potrzebny, inny przykład:
  1. <div class="vid" onclick="loadVideo($(this));" data-id="6mEx9FtuN0k"><a href="https://www.youtube.com/watch?v=6mEx9FtuN0k"></a><div><h3>Dead and Gone<br><span>T.I. featuring Justin Timberlake</span></h3></div></div>


wiem że chyba trzeba zrobić coś takiego ale nie mam pojęcia jak użyć tego poprawnie
  1. $html = '<div class="vid" onclick="loadVideo($(this));" data-id="VuNIsY6JdUw"><a href="https://www.youtube.com/watch?v=VuNIsY6JdUw"></a><div><h3>You Belong with Me<br><span>Taylor Swift</span></h3></div></div>';
  2.  
  3. preg_match_all('<div class="vid" onclick="loadVideo($(this));" data-id="(.*?)"><a href="nie bierzemy pod uwagę ale pamiętamy że ta zawartość się zmienia"></a><div><h3>(.*?)<br><span>(.*?)</span></h3></div></div>', $html, $matches);


a następnie zapętlić wynik i wypisać na ekran
  1. foreach ($matches as $val) {
  2. to jest id: $id
  3. to jest utwor: $utwor
  4. to jest wykonawca: $wykonawca
  5. }


chciałbym abym najlepiej w zmienną $HTML mógł wklepać kilka takich ciągów, a następnie wyciągnąć z nich te dane.
jacobson
Możnaby zrobić lepsze "użycia" tongue.gif ale ogólnie powinno działać no oczywiście oprócz href gdzie wstaw href=".+?" czyli ciąg znaków jakiś i jeżeli jesteś pewien ze wszystkie inne elementy są dokładnie jak mówisz (spacje, " a nie ' itp) do tego wstaw to pomiędzy | i | czyli |.......|is (ostatnie 2 litery odpowiadaja za prawidlowe parsowanie - http://php.net/manual/en/reference.pcre.pa....modifiers.php)
Largo1234
PHP to na pewno nie moja mocna strona... chyba nic nie zrozumialem z tego co napisales facepalmxd.gif

Mógłbyś zmodyfikować ten mój kod w pierwszym poście aby zadziałał tylko na tym jednym przykładzie? I po prostu wypisal jakies dane z tego ciągu html a reszte może jakoś dostosuje.
jacobson
Jeżeli struktura html jest prawidłowa i dokładnie taka to to powinno zadziałać

  1. preg_match_all('|<div class="vid" onclick="loadVideo($(this));" data-id="(.*?)"><a href=".+?"></a><div><h3>(.*?)<br><span>(.*?)</span></h3></div></div>|is', $html, $matches);


Zwróć uwagę czy w źródle strony - html ma dokładnie taką składnie czy nie ma jakiś spacji i innych smile.gif
Largo1234
Hurra, działa! yahoo.gif

Udało mi się zrobić coś takiego, tylko teraz nie wiem jak skontruwać pętle, oto kod:
  1. $html = '<div class="vid" onclick="loadVideo($(this));" data-id="4m48GqaOz90"><a href="https://www.youtube.com/watch?v=4m48GqaOz90"></a><div><h3>Boom Boom Pow<br><span>The Black Eyed Peas</span></h3></div></div><div class="vid" onclick="loadVideo($(this));" data-id="bESGLojNYSo"><a href="https://www.youtube.com/watch?v=bESGLojNYSo"></a><div><h3>Poker Face<br><span>Lady Gaga</span></h3></div></div>';
  2. preg_match_all('|<div class=".*?" onclick=".*?" data-id="(.*?)"><a href=".*?"></a><div><h3>(.*?)<br><span>(.*?)</span></h3></div></div>|is', $html, $matches);
  3. echo "<pre>";
  4. print_r($matches);
  5. echo "</pre>";
  6. echo "<br>";
  7. echo "INSERT INTO `strona`.`2009` (`link`, `utwor`, `wykonawca`, `id`) VALUES ('".$matches['1']['0']."', '".$matches['2']['0']."', '".$matches['3']['0']."', NULL);";
  8. echo "<br>";
  9. echo "INSERT INTO `strona`.`2009` (`link`, `utwor`, `wykonawca`, `id`) VALUES ('".$matches['1']['1']."', '".$matches['2']['1']."', '".$matches['3']['1']."', NULL);";


chodzi mi o to aby pętla wyglądała tak:
Cytat
INSERT INTO `strona`.`2009` (`link`, `utwor`, `wykonawca`, `id`) VALUES ('".$matches['1']['0']."', '".$matches['0']['0']."', '".$matches['3']['0']."', NULL);
INSERT INTO `strona`.`2009` (`link`, `utwor`, `wykonawca`, `id`) VALUES ('".$matches['1']['1']."', '".$matches['2']['1']."', '".$matches['3']['1']."', NULL);
INSERT INTO `strona`.`2009` (`link`, `utwor`, `wykonawca`, `id`) VALUES ('".$matches['1']['2']."', '".$matches['2']['2']."', '".$matches['3']['2']."', NULL);
i tak dalej...


Udało mi się zrobić pętle, wszystko świetnie działa! Dzięki za pomoc! oto kod:
  1. $html = '<div class="vid" onclick="loadVideo($(this));" data-id="4m48GqaOz90"><a href="https://www.youtube.com/watch?v=4m48GqaOz90"></a><div><h3>Boom Boom Pow<br><span>The Black Eyed Peas</span></h3></div></div><div class="vid" onclick="loadVideo($(this));" data-id="bESGLojNYSo"><a href="https://www.youtube.com/watch?v=bESGLojNYSo"></a><div><h3>Poker Face<br><span>Lady Gaga</span></h3></div></div>';
  2. preg_match_all('|<div class=".*?" onclick=".*?" data-id="(.*?)"><a href=".*?"></a><div><h3>(.*?)<br><span>(.*?)</span></h3></div></div>|is', $html, $matches);
  3. for ($i=0;$i<2;$i++){
  4. echo "INSERT INTO `strona`.`2009` (`link`, `utwor`, `wykonawca`, `id`) VALUES ('".$matches['1'][''.$i.'']."', '".$matches['2'][''.$i.'']."', '".$matches['3'][''.$i.'']."', NULL);";
  5. }
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.