Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] cURL i explode
Forum PHP.pl > Forum > Przedszkole
markez07
Witam,

wczoraj długo kombinowałem i nic. Chcę wyciąć załóżmy ze strony wp.pl z diva bxWiadomosci poszczególne tytuły artykułów np. "Rosjanie pozmieniali zeznania?" Jak to zrobić?

  1. <li><a title="Rosjanie pozmieniali zeznania?" href="http://wiadomosci.wp.pl/kat,1342,title,Rosjanie-pozmieniali-zeznania,wid,13619589,wiadomosc.html">Rosjanie pozmieniali zeznania?</a></li>



Pobieram stronę:

  1. <?php
  2. $homepage = file_get_contents('http://www.wp.pl/');
  3. ?>



a dalej nie mam pojęcia, bo w sieci znalazłem jedynie coś tego typu. Jak to zastosować by wyciąć część strony i wyświetlić?


  1. <?php
  2. $nauka = "jeden+dwa+trzy+cztery";
  3.  
  4. $a = explode("+", $nauka);
  5. echo "wszystkie = $nauka <br/>";
  6. echo "1 = $a[0]<br/>";
  7. echo "2 = $a[1]<br/>";
  8. echo "3 = $a[2]<br/>";
  9. echo "4 = $a[3]";
  10. ?>


pozdrawiam
Piogola
Użyj wyrażeń regularnych
markez07
Chciałbym nauczyć się jak to wykonać za pomocą explode.
erix
Nie da się, a jak już, to tak to pokomplikujesz, że zajeździsz albo siebie, albo procesor, albo pamięć.
markez07
Podsuniecie jakiś artykuł czy też kurs w którym jest jasno opisane jak wykorzystać do tego wyrażenia regularne?

e:

Znalazłem w necie coś takiego:

  1. <?php
  2. $tekst = file_get_contents("http://www.armia.toproste.pl/statystyki/7.6/");
  3.  
  4. preg_match_all('/html" target="_blank">([A-Za-z ]*)<\/a><\/td>/', $tekst, $nick);
  5.  
  6. preg_match_all('/<\/a><\/td>\s*<td class="textright">([\d]*).<\/td>/i', $tekst, $lvl);
  7. for($i=0; $i<200; $i++){
  8. echo $nick[1][$i]." | ".$lvl[0][$i]."<br />";
  9. }
  10. ?>


Wkleiłem sobie żeby sprawdzić i działa. Wyciąga z tamtej strony dane. Problem w tym, że nie rozumiem tego... Nie wiem o co chodzi z tymi znakami - ukośniki, A-Za-z itp. Jak tym wskazuje co ma wyciąć?
Piogola
Wpisz w wyszukiwarkę google frazy "wyrażenia regularne" i masz setki wyników z kursami
Crozin
Wyrażenia regularne nie nadają się do parsowania HTML-a. Użyj DOMDocument.
markez07
Widzę, że każdy coś innego pisze. Jedni, że explode, drudzy wyrażenia regularne, a trzeci jeszcze coś innego. smile.gif

Znalazłem jakiś artykuł:

  1. http://wyrazeniaregularne.wordpress.com/


ale nadal nie wiem jak pobrać ze strony część która mnie interesuje.
Jeżeli da się to proszę to jakoś "łopatologiczniej" mi wytłumaczyć, bo chciałbym się tego nauczyć.
lobopol
Polecam do nauki http://regex.larsolavtorvik.com/
erix
Albo phpQuery. Wszystko wyciągniesz selektorami CSS, jak w jQuery.

DOMDocument lubi się sypać przy niepoprawnej składni.
markez07
Cytat
'zwyczajne' czyli takie jak np.: 'a', 'd', '4', 's' i znaki
'niezwyczajne' - '^', '$', '*', '+', '?', '.', '(', ')', '[', ']', '{', '}', '\\',


Moja mózgownica nie pojmuje jak za pomocą tych znaków wskazać konkretny element. Patrząc na inne strony wiem co dany symbol oznacza, ale nie potrafię ogarnąć jak nimi coś wskazać, jakiegoś diva czy wiersz. Ta tematyka chyba jest dość trudna...


erix co prostsze w zastosowaniu i wydajniejsze phpQuery czy wyrażenia regularne? Mile widziane tutoriale itp.
lobopol
Prostsze phpquery, wydajniejsze zwykłe wyrażenia regularne. A prawda jest taka, że wyrażeń regularnych trzeba się samodzielnie nauczyć, ciężko jest je dokładnie wytłumaczyć.
markez07
  1.  
  2. preg_match_all('/html" target="_blank">([A-Za-z ]*)<\/a><\/td>/', $tekst, $nick);
  3.  
  4. preg_match_all('/<\/a><\/td>\s*<td class="textright">([\d]*).<\/td>/i', $tekst, $lvl);
  5.  


To po preg_match_all to czarna magia. W wierszu 4 chociaż widać class...

Cytat
Wyrażenia regularne cz 1

– 4:57 pm
Napisane w Regex
Komentarze są wyłączone

Składnia

zwyczajne znaki oznaczające wyłącznie siebie samego np. a, z, g, 1, 9, ! (nie mają żadnego innego znaczenia poza znaczeniem podstawowym)
znaki specjalne (metaznaki) mają specjalne znaczenie:
. dopasowanie dowolnego jednego znaku (łopatologicznie kropka oznacza dowolny jeden znak)
do wyrażenia a.a można dopasować aua, ala, ada
* dopasowanie zera lub większej liczby elementów poprzedzających
do wyrażenia w*akacje można dopasować akacje, wakacje, wwwwakacje
+ dopasowanie co najmniej jednego poprzedzającego elementu (łopatologicznie 1 lub więcej razy)
do wyrażenia nu+da można dopasować nuda, nuuda, nuuuuuuuuuda
? dopasowanie zera lub jednego poprzedzającego elementu
(łopatologicznie element poprzedzający może ale nie musi wystąpić)
do wyrażenie a?a można dopasować aa, a
() zapamiętanie zawartości nawiasu jako elementu
wyrażenie mieszkam na ulicy (Wesołej)
takie wyrażenie zapamięta wartość w nawiasie czyli Wesołej
[] dopasowanie jednego elementu z listy, wszystkie elementy listy muszą znaleźć się pomiędzy [ i ]. Uwaga! Pamiętaj, że każdy znak pomiędzy [] traktowany jest jako pojedynczy znak.
do wyrażenia [abcd]+ dopasujemy a, c, ab, acd, dac
- tworzenie zakresu w liście czyli tylko pomiędzy []
do wyrażenia [a-p] dopasujemy dowolną literę z przedziału a-p
| oznacza lub czyli alternatywę
do wyrażenia Kopernik był (kobietą|mężczyzną) dopasujemy zarówno Kopernik był kobietą jak i Kopernik był mężczyzną
^ dopasowanie do początku pola ( łopatologicznie znak następujący po ^ musi być początkiem wyrażenie w którym dokonywujemy dopasowania)
do wyrażenia ^Ala
dopasujemy Ala ma kota ale już nie dopasujemy Kot ma Ale
^ stosujemy także razem z [] w liście do wyrażenia negacji
do wyrażenia [^a]+ dopasujemy jakiekolwiek słowo które nie zawiera litery a np. kret, pies
$ dopasowanie do końca pola( łopatologicznie znak poprzedzający $ musi być końcem wyrażenie w którym dokonywujemy dopasowania)
do wyrażenia Ale$ dopasujemy zdanie Kot ma Ale ale nie dopasuje już Ale gorąco
\ oznacza anulowanie znaczenia wszystkich powyższych symboli (łopatologicznie wszystkie specjalne znaki po poprzedzeniu ich \ „tracą moc” i odzyskują podstawowe znaczenie)
\. lub \+
oznaczają tylko i wyłącznie kropkę i plus

Symbole formatujące tekst

\e oznacza escape
\n oznacza nową linię
\r oznacza powrót karetki
\t oznacza tabulację
\a oznacza alarm

Wbudowane klasy znaków( występują w parach \mała litera \duża litera, gdzie mała litera np \d (skrót od digit) to dowolna cyfra, a duża litera np \D dowolny znak nie będący \d czyli dowolny znak nie będący cyfrą)

\d dowolna cyfra
\D dowolny znak nie będący cyfrą
\s dowolny biały znak (np spacja)
\S dowolny znak nie będący białym znakiem
\w dowolny znak należący do słowa(cyfry, litery i znak _)
\W dowolny znak nie należący do słowa

Pozostałe klasy znaków

[[:digit:]] dowolny znak będący cyfrą
[[:alpha:]] dowolny znak będący literą
[[:alnum:]] dowolny znak będący literą lub cyfrą
[[:lower:]] dowolny znak będący małą literą
[[:upper:]] dowolny znak będący dużą literą
[[:punct:]] dowolny znak interpunkcyjny
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.