Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]preg_match_all() jak wyciągnąć kilka danych na raz
PYJTER
post
Post #1





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 23.01.2014

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


Witam mam taki problem mianowicie chciałbym wyciągnąć dane KOD, Miasto, Ulica np. dla strony: http://www.pkt.pl/kwiaty/4-1/ i jak zrobię tak to ładnie mi wszystkie kody pocztowe zbierze:

  1.  
  2. <?php
  3. $content = file_get_contents('http://www.pkt.pl/kwiaty/4-1/');
  4. preg_match_all('#<span class="zipCode" itemprop="postalCode">(.*?)<\/span>#si', $content, $wynik);
  5. print_r($wynik);
  6. ?>
  7.  


I wynik jest w tablicy super ładnie i teraz pytanie jak zrobić by dodać do wyrażenia i miasto i ulicę oraz nazwę dodatkowo/ jak dokleić do tego co wyżej jeszcze takie wyrażenie: <span class="city" itemprop="addressRegion">(.*?)<\/span> bo próbuję i zwraca mi tylko Array ( )

Przykład kodu źródłowego z którego chcę wyciągnąć dane:
  1. <h2 class="paidS">
  2.  
  3.  
  4. <a href="http://www.pkt.pl/frezja-s-c-kwiaciarnia-dekoracje-%C5%9Blubne-sal/100729543/5-1/?type=local"
  5. title="KWIACIARNIA XXX"
  6. class="trkname_resultsclick trkkey_100729543-local"
  7. itemprop="name"
  8. >
  9. KWIACIARNIA XXX
  10. </a>
  11. </h2>
  12. </li>
  13.  
  14.  
  15.  
  16. <li><p class="address" itemprop="address" itemscope itemtype="http://schema.org/PostalAddress">
  17. <span class="zipCode" itemprop="postalCode">00-000</span>
  18. <span class="city" itemprop="addressRegion">Burzykowo</span>
  19. <span class="addressComma">,</span>
  20. <span class="street" itemprop="streetAddress">
  21. pl. Adamsów 666
  22. </span>


Z góry dziękuję za pomoc

Ten post edytował PYJTER 10.02.2014, 18:10:04
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
Daimos
post
Post #2





Grupa: Zarejestrowani
Postów: 1 319
Pomógł: 118
Dołączył: 26.11.2003
Skąd: Lublin

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


  1. <?php
  2.  
  3. $html = '
  4. <li><p class="address" itemprop="address" itemscope itemtype="http://schema.org/PostalAddress">
  5. <span class="zipCode" itemprop="postalCode">00-000</span>
  6. <span class="city" itemprop="addressRegion">Burzykowo</span>
  7. <span class="addressComma">,</span>
  8. <span class="street" itemprop="streetAddress">
  9. pl. Adamsów 666
  10. </span>';
  11. $pattern = '#<span class="zipCode" itemprop="postalCode">(.+?)</span>.+?'
  12. . '<span class="city" itemprop="addressRegion">(.+?)</span>.+?'
  13. . '<span class="street" itemprop="streetAddress">(.+?)</span>'
  14. . '#s';
  15. preg_match_all($pattern, $html, $matches);
  16. var_dump($matches);

Ale zdecydowanie lepiej będzie Ci biegać po kodzie html za pomocą dom
Go to the top of the page
+Quote Post
PYJTER
post
Post #3





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 23.01.2014

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


Dzięki działa super ale dalej nie potrafię wyciągnąć danych np nazwy albo link'a załóżmy przykładowo poniżej jakaś firms

  1. <h2 >
  2.  
  3.  
  4. <a href="http://www.pkt.pl/frezja-s-c-kwiaciarnia-dekoracje-%C5%9Blubne-sal/100729543/5-1/?type=local"
  5. title="Frezja s.c. Kwiaciarnia. Dekoracje ślubne sal"
  6. class="trkname_resultsclick trkkey_100729543-local"
  7. itemprop="name"
  8. >
  9. Frezja s.c. Kwiaciarnia. Dekoracje ślubne sal
  10.  
  11. </a>
  12. </h2>



I chcę wyciągnąć dane między znacznikami <h2 > a </h2> załóżmy chce link wyciągnąć ten: http://www.pkt.pl/frezja-s-c-kwiaciarnia-d...5-1/?type=local

bo próbuję np:
  1. '#<h2><a href="(.+?)" title="#si'
i nic nie zwraca (IMG:style_emoticons/default/thumbsdownsmileyanim.gif)

i sprawa jeszcze jedna telefon:

  1. <div class="phone" itemprop="telephone">Tel: <b>00 222 33 44</b></div>


kod taki:

  1. '#<div class="phone" itemprop="telephone">Tel: <b>(.+?)</b></div>#si'


także zwraca pustą tablicę...

Ten post edytował PYJTER 10.02.2014, 22:56:09
Go to the top of the page
+Quote Post
_Borys_
post
Post #4





Grupa: Zarejestrowani
Postów: 587
Pomógł: 190
Dołączył: 5.02.2011
Skąd: 64-800

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


Kod
'#<h2.*>\s*<a href="(.+?)".+>\s*(.+)\s*<\/a>#si'

Tam gdzie jest dużo spacji stosuj \s*
A przy telefonie musisz dodać backslash-e przed slashami <\/b><\/div>
Go to the top of the page
+Quote Post
abjk
post
Post #5





Grupa: Zarejestrowani
Postów: 29
Pomógł: 6
Dołączył: 5.04.2013
Skąd: W

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


  1. preg_match_all('#<h2\s(?:class="paidS")?>[^<]*<a[^>]+>\s*(?<name>[\p{L}\p{Nd}\p{P}\p{Zs}]+)(?:[^<]*</?[a-z0-9]{1,2}>){4}(?:<[a-z0-9]\s(?:[a-z]+\s?(?:="[^"]+"\s*)*){4}>)
  2. (?:(?:[^<]*<[a-z]{4}[^>]*>)(?<zipCode>[^<]+)(?:\s?</[a-z]{4}>))
  3. (?:(?:[^<]*<[a-z]{4}[^>]*>)(?<city>[^<]+)(?:\s?</[a-z]{4}>))
  4. (?:(?:(?:[^<]*<[a-z]{4}[^>]*>)(?<addressComma>[^<]+)(?:\s?</[a-z]{4}>))
  5. (?:(?:[^<]*<[a-z]{4}[^>]*>)(?<street>[\p{L}\p{Nd}\p{P}\p{Zs}\n]+(?![^<]))(?:\s?</[a-z]{4}>)))?#usi', $content, $wynik);
  6.  
  7. var_dump($wynik['name'],$wynik['zipCode'],$wynik['city'],$wynik['addressComma'],$wynik['street']);


Ten post edytował abjk 11.02.2014, 13:53:39
Go to the top of the page
+Quote Post
PYJTER
post
Post #6





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 23.01.2014

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


Cytat(abjk @ 11.02.2014, 13:37:22 ) *
  1. preg_match_all('#<h2\s(?:class="paidS")?>[^<]*<a[^>]+>\s*(?<name>[\p{L}\p{Nd}\p{P}\p{Zs}]+)(?:[^<]*</?[a-z0-9]{1,2}>){4}(?:<[a-z0-9]\s(?:[a-z]+\s?(?:="[^"]+"\s*)*){4}>)
  2. (?:(?:[^<]*<[a-z]{4}[^>]*>)(?<zipCode>[^<]+)(?:\s?</[a-z]{4}>))
  3. (?:(?:[^<]*<[a-z]{4}[^>]*>)(?<city>[^<]+)(?:\s?</[a-z]{4}>))
  4. (?:(?:(?:[^<]*<[a-z]{4}[^>]*>)(?<addressComma>[^<]+)(?:\s?</[a-z]{4}>))
  5. (?:(?:[^<]*<[a-z]{4}[^>]*>)(?<street>[\p{L}\p{Nd}\p{P}\p{Zs}\n]+(?![^<]))(?:\s?</[a-z]{4}>)))?#usi', $content, $wynik);
  6.  
  7. var_dump($wynik['name'],$wynik['zipCode'],$wynik['city'],$wynik['addressComma'],$wynik['street']);


Chyba będę musiał to rozpisać na kartce żeby zrozumieć (IMG:style_emoticons/default/biggrin.gif) ale dzięki serdeczne (IMG:style_emoticons/default/wink.gif) chodziło mi dokłądnie o <h2\s(?:class="paidS")?> (IMG:style_emoticons/default/wink.gif) ale z miłą chęcią ogarnę resztę (IMG:style_emoticons/default/wink.gif)
znowu coś nowego... (IMG:style_emoticons/default/wink.gif)
A jeszcze mam pytanie z innej beczki czasami można spotkać adres email a czasami nie i teraz... mam wyrażenie regularne 'nazwa'.'adres'.'mail' i jak jes mail podany to jest oki a jak nie to wywala mi błąd Notice: Undefined offset: 0 no wiadomo bo nie znalazł nic zgodnego ale jak zrobić by jeśli nie ma podanego mail zwróciło tylko np. 'nazwa'.'adres'.' ' czyli jeśli nie ma wzorca w kodzie html zwraca mi nazwę adres oraz pustą wartość.
Go to the top of the page
+Quote Post
Turson
post
Post #7





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Cytat
A jeszcze mam pytanie z innej beczki czasami można spotkać adres email a czasami nie i teraz... mam wyrażenie regularne 'nazwa'.'adres'.'mail' i jak jes mail podany to jest oki a jak nie to wywala mi błąd Notice: Undefined offset: 0 no wiadomo bo nie znalazł nic zgodnego ale jak zrobić by jeśli nie ma podanego mail zwróciło tylko np. 'nazwa'.'adres'.' ' czyli jeśli nie ma wzorca w kodzie html zwraca mi nazwę adres oraz pustą wartość.

możesz podać przykład?
Go to the top of the page
+Quote Post
PYJTER
post
Post #8





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 23.01.2014

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


Oki podam przykład złóżmy:
Link 1:
http://www.pkt.pl/melbet-sp-z-o-o-producen...5-1/?type=local

i Link 2:
http://www.pkt.pl/cegie%C5%82ka-bis-s-c-dy...5-1/?type=local

W pierwszym linku mamy 42-286 Koszęcin, Cegielniana 15, woj. śląskie czyli nasz wzorzec będzie wyglądał następująco jeśli chodzi o strukturę: 'kod'.'miasto'.'ulica'.'wojewodztwo'

a w drugim jest: 42-202 Częstochowa, woj. śląskie czyli 'kod'.'miasto'.'wojewodztwo' czyli brak jest ulicy i w tym miejscu skrypt będzie sypał błędami Undefined offset: 0....

I teraz chcę aby jeśli brakuje jakiejś rzeczy tzn. np ulicy albo email to żeby wyświetlało mi dane tylko te które są a tam gdzie ich nie ma po prostu puste pole zostawiało...

Może wizualnie (IMG:style_emoticons/default/biggrin.gif)

(IMG:http://naforum.zapodaj.net/thumbs/a1dab06609b8.png)
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




? sluzy do okreslania ze cos moze byc ale nie musi

......(cos co jest ale nie musi byc)?......
Go to the top of the page
+Quote Post
Turson
post
Post #10





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Bez nawiasu (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 07:48