Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][Wyrażenia regularne], Problem z wyciągnięciem poprawnej trści
Astan
post 23.02.2015, 23:29:13
Post #1





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 16.01.2015

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


Witam,

zacząłem naukę z wyrażeniami regularnym, jestem osoba początkującą i mam pewien problem z wycągnięciem treści.
Z niżej podanego kodu potrzebuję wyciągnąć adres http ze znacznika img oraz treść, która znajduje się w znacznikach <b>treść</b>

  1. <tr class="odd">
  2. <td><a href="/user/captcha/103134708">
  3. <img src="http://static.deathbycaptcha.com/captchas/3464a54d292503e03cbaff0a8d45d9f3f2252905" alt="" />
  4. </a></td>
  5. <td>Thu Feb 19 07:02:09 2015</td>
  6. <td>
  7. <b>ndeps</b>
  8. <form name="captcha-103134708-report-form"
  9. action="/user/captcha/103134708/report"
  10. method="post">
  11. <button type="submit">Report incorrect result</button>
  12. </form>
  13. </td>
  14. </tr>
  15. <tr class="even">
  16. <td><a href="/user/captcha/103134675">
  17. <img src="http://static.deathbycaptcha.com/captchas/438b736f601416a42945d8de9711d542767ebfb3" alt="" />
  18. </a></td>
  19. <td>Thu Feb 19 07:02:09 2015</td>
  20. <td>
  21. &mdash;
  22. </td>
  23. </tr>
  24. <tr class="odd">
  25. <td><a href="/user/captcha/103134206">
  26. <img src="http://static.deathbycaptcha.com/captchas/5cc88aad3a5c322c248dde17598edb7670f7efed" alt="" />
  27. </a></td>
  28. <td>Thu Feb 19 07:02:01 2015</td>
  29. <td>
  30. <b>anesp</b>
  31. <form name="captcha-103134206-report-form"
  32. action="/user/captcha/103134206/report"
  33. method="post">
  34. <button type="submit">Report incorrect result</button>
  35. </form>
  36. </td>
  37. </tr>


Prosiłbym o pomoc w rozwiązaniu problemu lub nakierowanie na poprawne rozwiązanie.

o to mój kawałek kodu
  1. preg_match("/<img src="([^"]+)" alt=""\s\/>.*?<b>([^<]+)<\/b>/" .... );


Ten post edytował Astan 23.02.2015, 23:30:34
Go to the top of the page
+Quote Post
nospor
post 24.02.2015, 08:05:39
Post #2





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




Poki co to Twoj problem to nie jest z wyrazeniami ale z podstawami obslugi tekstow....

Jak tekst rozpoczynasz cudzyslowiem, to nie mozesz sobie od ta do tego tekstu wlożyc cudzysłowa. Lektura obowiązkowa
http://php.net/manual/en/language.types.string.php


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Astan
post 24.02.2015, 12:25:09
Post #3





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 16.01.2015

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


  1. preg_match('/<img src="([^"]+)" alt=""\s\/>.*?<b>([^<]+)<\/b>/' .... );


przepisując kod tutaj nie zwróciłem uwago na to że powinien być apostrof.
Jest ktoś w stanie mi pomóc rozwiąc mój problem ?

Ten post edytował Astan 24.02.2015, 12:25:37
Go to the top of the page
+Quote Post
Wazniak96
post 24.02.2015, 13:25:21
Post #4





Grupa: Zarejestrowani
Postów: 550
Pomógł: 75
Dołączył: 5.06.2012
Skąd: Lębork

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


Cytat(Astan @ 24.02.2015, 12:25:09 ) *
  1. preg_match('/<img src="([^"]+)" alt=""\s\/>.*?<b>([^<]+)<\/b>/' .... );


przepisując kod tutaj nie zwróciłem uwago na to że powinien być apostrof.
Jest ktoś w stanie mi pomóc rozwiąc mój problem ?

Serio go przepisujesz czy próbujesz ciemnotę wcisnąć ? wink.gif
Go to the top of the page
+Quote Post
jackraymund
post 25.02.2015, 08:23:39
Post #5





Grupa: Zarejestrowani
Postów: 217
Pomógł: 21
Dołączył: 10.06.2011
Skąd: Głogów

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


  1. '/<img src="([^"]+)" alt=""\s\/>.*?<b>([^<]+)<\/b>/is'

wszystko wyglada elegancko, dodalem tylko flagi case sensitive i aby kropka odpowiadała za białe znaki.(case sensitive niby niepotrzebne, ale zazwyczaj dodaje do regexpa, w razie zmian)
Jedynie poprawisz to ci ci powiedział nospor

Ten post edytował jackraymund 25.02.2015, 08:25:57


--------------------
Wykonuje zlecenia na pobieranie danych ze stron i różne boty.
Go to the top of the page
+Quote Post
Astan
post 25.02.2015, 20:56:55
Post #6





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 16.01.2015

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


Zacząłem to testowac na stronie regular exspression, link do przykładu https://www.regex101.com/r/hM5sF1/1

Nie wyciąga mi jednego adresu z img, który znajduje się na ciemnym niebieskim polu.
<img src="http://static.deathbycaptcha.com/captchas/5cc88aad3a5c322c248dde17598edb7670f7efed" alt="" />

Czy ktoś wie jak mogę to poprawić ?

Ten post edytował Astan 25.02.2015, 21:19:58
Go to the top of the page
+Quote Post
kreatiff
post 26.02.2015, 22:24:20
Post #7





Grupa: Zarejestrowani
Postów: 324
Pomógł: 105
Dołączył: 7.08.2012

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


Nie wyciąga Ci tego adresu, ponieważ nie następuje po nim tekst w znacznikach <b>...</b>. Tzn, wyciąga prawidłowo, ponieważ pobiera adres z img src, na który natrafia, ale potem szuka tekstu w znaczniku <b>. A że taki tekst znajduje się dopiero w kolejnym rzędzie tabeli, za kolejnym adresem w img src, to niestety ten właśnie adres zostaje pominięty.
Podsumowując, pominięte zostaną wszystkie adresy, dla których w danym rzędzie tabeli nie występuje pogrubiony tekst.

Więc by to poprawić najlepiej byłoby rozpisać we wzorze wszystkie możliwe układy znaczników w rzędzach tabeli źródłowej. Wówczas jak coś się pojawi to się to wyłapie, a jak nie to ominie.

Dla tego konkretnego wycinka danych można je wyciągać np. tym:
  1. preg_match_all('#<img src="(.*?)".*?(?>(?:<b>(.*?)</b>|&mdash;))#su', $wsad, $trafienia);
Ten wzór zakłada, że w rzędzie występuje albo pogrubiony tekst, albo encja (myślnik). Łapany jest albo pogrubiony tekst, gdy występuje, albo pusty string, gdy tego tekstu brak.

Ten post edytował kreatiff 26.02.2015, 22:29:19
Go to the top of the page
+Quote Post
Astan
post 27.02.2015, 08:55:41
Post #8





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 16.01.2015

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


Dziękuję za pomoc i na nakierowanie w rozwiązaniu problemu. Musiałem trochę zmodyfikować podany kod
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 25.06.2025 - 06:17