Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Wyrażenia regularne jako pomoc w odszukaniu fragmentu strony
Cypherq
post
Post #1





Grupa: Zarejestrowani
Postów: 181
Pomógł: 9
Dołączył: 28.08.2006
Skąd: Katowice

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


Problem jest mniej więcej taki: mamy sklep, np: maximedia.pl
Wybieramy jakiś produkt, np: TEN

Strona z urządzeniem zawiera tabelkę (podam tylko fragment):

Kamera
Przetwornik obrazu rozmiar: Przetwornik obrazu ClearVid CMOS 1/3,0
Przetwornik obrazu system: Progresywny
14-bitowy przetwornik DXP: TAK
Technologia Advanced HAD: NIE
Liczba pikseli brutto (tys.): 3200
Efektywna liczba pikseli w trybie kamery (tys.): Tryb 16:9; 2280 / Tryb 4:3; 1710
Efektywna liczba pikseli w trybie aparatu (tys.): Tryb 16:9; 2280 / Tryb 4:3; 3040
Nastawianie ostrości automatyka w pełnym zakresie: TAK
Nastawianie ostrości ręczne: TAK
Przycisk ręcznego nastawiania ostrości: Panel

Jak wydobyć tylko źródło tej tabelki? Próbowałem wyrażeniami regularnymi, ale tabela nie ma (tak mi sie wydaje) żadnych znaków szczególnych. Nie da się więc ich łatwo znaleźć, czy ktoś ma jakiś ciekawy pomysł?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 16)
webdice
post
Post #2


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Nie żartuj nawet. Dla Ciebie uchwytem będzie:

  1. <table width="100%" border="0" cellpadding="2" cellspacing="1">


i

Go to the top of the page
+Quote Post
Cypherq
post
Post #3





Grupa: Zarejestrowani
Postów: 181
Pomógł: 9
Dołączył: 28.08.2006
Skąd: Katowice

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


Fakt, przy pierwszym się nie zastanowiłem. Jednak przy drugim, znajdę również końcówki innych tabel (bo w końcu operuje na całym źródle). Tak czy siak dzięki za pomoc.
Go to the top of the page
+Quote Post
--Cypherq--
post
Post #4





Goście







Rany, głupio tak, ale coś te wyrażenia regularne nie wchodzą do głowy. Jak zamienić za pomocą preg_replace():

  1. <?php
  2. <tr rozneparamentry=roznychwartosci>
  3. ?>
(analogicznie z <td> i <table>)

na

  1. <?php
  2. <tr>
  3. ?>
(czyli znaczniki bez parametrow)

żeby nie było, że proszę o gotowe to próbowałem już tak:

  1. <?php
  2. preg_replace('/^<table[a-zA-Z0-9.=\"]*>$/', '<table>', $site);
  3. ?>


Jednak i kilka innych sposobów, niestety nie dzieje się nic, a ja czytam kolejny artykuł o regexpach i nie wyciągam z niego widocznie odpowiednich wniosków. Pomożecie?
Go to the top of the page
+Quote Post
Cypherq
post
Post #5





Grupa: Zarejestrowani
Postów: 181
Pomógł: 9
Dołączył: 28.08.2006
Skąd: Katowice

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


Mam nadzieję, że nie dostanie mi się za posty pod postami własnymi, ale przez pomyłkę napisałem jako gość i nie mogę posta edytować. Działa mi taka prosta konstrukcja:

  1. <?php
  2. preg_replace("/<table.*>/", '<table>', $site);
  3. ?>


Gdy próbowałem tak:
  1. <?php
  2. preg_replace("/^<table.*>$/", '<table>', $site);
  3. ?>


Nie działało. Czemu początek i koniec wyrażenia blokował działanie? Źle zrozumiałem zasadę ich funkcjonowania?
Go to the top of the page
+Quote Post
webdice
post
Post #6


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




  1. <?php
  2. preg_replace ('#<table ([^>]+)#', ,);
  3. ?>


Kod
([^>]+)


Czyli wszystko aż do napotkania znaku >.
Go to the top of the page
+Quote Post
Cypherq
post
Post #7





Grupa: Zarejestrowani
Postów: 181
Pomógł: 9
Dołączył: 28.08.2006
Skąd: Katowice

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


Ale wtedy > zostanie i wyjdzie ostatecznie <table>>
Go to the top of the page
+Quote Post
webdice
post
Post #8


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Myślenie nie boli (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .

  1. <?php
  2. preg_replace ('#<table ([^>]+)>#', ,);
  3. ?>
Go to the top of the page
+Quote Post
Cypherq
post
Post #9





Grupa: Zarejestrowani
Postów: 181
Pomógł: 9
Dołączył: 28.08.2006
Skąd: Katowice

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


Tylko nie obrażę Cię jeśli zapytam "czemu tak"? Czyli jak to działa?

Post pod postem, ale po dłuższej przerwie a pytanie zgadza się z tematem. Mianowicie, próbuję rozwiązać problem następujący:

W kodzie HTML strony znajduje sie N linków do produktów. Linki te mają niepowtarzalną w innych fragmentach kodu konstrukcję (<a class="produkt" -> klasa ta nie powtarza się w innych miejscach). Jak wydobyć je, tzn. usunąć całą resztę kodu oprócz linków? Chodzi mi raczej o wyjaśnienie krokowe, ew. podpowiedź co do użycia konkretnych funkcji, które mogą mi tutaj pomóc.
Go to the top of the page
+Quote Post
nowotny
post
Post #10





Grupa: Zarejestrowani
Postów: 875
Pomógł: 122
Dołączył: 2.02.2008

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


Ja nie rozumiem dlaczego na siłę starasz się zastosować preg_replace" title="Zobacz w manualu PHP" target="_manual kied preg_match_all" title="Zobacz w manualu PHP" target="_manual bedzie znacznie lepszym wyjsciem...
  1. <?php
  2. preg_match_all("#<a class=\"produkt\" .+>.+</a>#U", $tekst, $wyniki);
  3. print_r($wyniki);
  4. ?>


I zobacz sobie co zawiera tablica $wyniki... BTW, przydałby się trochę dłuższy ciąg do porównywania...
Go to the top of the page
+Quote Post
sobstel
post
Post #11





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

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


Myślę, że lepszy by tu mogło być zastosowanie DOM" title="Zobacz w manualu PHP" target="_manual, loadHTML i potem kolejnych metod przetwarzających.
Go to the top of the page
+Quote Post
Cypherq
post
Post #12





Grupa: Zarejestrowani
Postów: 181
Pomógł: 9
Dołączył: 28.08.2006
Skąd: Katowice

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


Serdecznie dziękuję za pomoc. Pomysł Novotnego sprawdził się, chociaż zawierał literówkę:

  1. <?php
  2. preg_match_all("#<a class=\"produkt\" .+>.+</a>#U", $tekst, $wyniki);
  3. print_r($wyniki);
  4. ?>


Czyli brak backslasha przed /a> (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Twoja uwaga na temat niepotrzebnego zastosowania preg_replace jest bardzo słuszna, głównie po to kombinuję z regularnymi, żeby lepiej znać ich zastosowanie. Btw. po wpisaniu preg w wyszukiwarkę funkcji w manualu, preg_math_all nie wyskakuje, a link jest w preg_math, ale go przeoczyłem :]
Go to the top of the page
+Quote Post
nowotny
post
Post #13





Grupa: Zarejestrowani
Postów: 875
Pomógł: 122
Dołączył: 2.02.2008

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


Cytat(Cypherq @ 5.02.2008, 10:57:50 ) *
Czyli brak backslasha przed /a> (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

OIMW slasha nie trzeba eskejpować... :/
Go to the top of the page
+Quote Post
Cypherq
post
Post #14





Grupa: Zarejestrowani
Postów: 181
Pomógł: 9
Dołączył: 28.08.2006
Skąd: Katowice

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


Łe? No chyba jednak tak, skoro wywala mi błąd o nieznanym modyfikatorze "a"...
Go to the top of the page
+Quote Post
nowotny
post
Post #15





Grupa: Zarejestrowani
Postów: 875
Pomógł: 122
Dołączył: 2.02.2008

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


Cytat(Cypherq @ 5.02.2008, 11:15:09 ) *
Łe? No chyba jednak tak, skoro wywala mi błąd o nieznanym modyfikatorze "a"...

No jeśli używasz slashy do delimitowania wyrażenia to tak... ale ogólnie slasha sie nie eskejpuje...
Go to the top of the page
+Quote Post
Cypherq
post
Post #16





Grupa: Zarejestrowani
Postów: 181
Pomógł: 9
Dołączył: 28.08.2006
Skąd: Katowice

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


Czyli lepiej używać np. # jako delimitera? Kurde, a ja eskejpowałem każdego slasha :/
Go to the top of the page
+Quote Post
nowotny
post
Post #17





Grupa: Zarejestrowani
Postów: 875
Pomógł: 122
Dołączył: 2.02.2008

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


Ja hołduję zasadzie że najlepiej używać takiego znaku jakiego nie ma w patternie żeby się za dużo nie naeskejpować bo wtedy wyrażenie robi się mało przejrzyste... (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ja najczęściej używam hasha (#) ale stosuje też inne, zależnie od potrzeby...
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: 24.08.2025 - 10:40