Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wyrażenia regularne w preg_match()
qdlaty88
post
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 2
Dołączył: 11.09.2013

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


Z kodu html książki telefonicznej chcę wyciągnąć ilość znalezionych pozycji, które zapisane są już na początku dokumentu:

  1. <meta name="description" content="11 256 wyników dla zapytania medycyna"/>


Dokładnie interesuje mnie ciąg znaków "11 256 wyników" i nic poza tym.
Ta liczba jest zależna od kryterium wyszukiwania, dlatego wyrażenie regularne ją odnajdujące powinno wyglądać tak:

  1. (\d+\s)+wyników


Powyższe wyrażenie działa na dostępnych w sieci testerach ale w mojej aplikacji do tablicy zapisuje jedynie "256 wyników" zamiast "11 256 wyników".
Kod odpowiedzialny za wyszukanie i wydruk:

  1. $patternResults = '/(\d+\s)+wyników/';
  2. preg_match($patternResults, $file, $matchesResults);
  3. var_export($matchesResults[0]);


A wydruk to "256 wyników"...
Gdzie się podziały te dwie jedynki?
Dodam, że jeśli tak spreparuję wyrażenie by preg_match() wyszukiwał adresy e-mail, linki do podstron czy liczby obojętnie jakie lub podobnej wielkości co ta z przykładu to wszystko działa. Tylko tej interesującej mnie informacji nie chce przegryźć...

Ten post edytował qdlaty88 11.09.2013, 13:30:14
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
qdlaty88
post
Post #2





Grupa: Zarejestrowani
Postów: 21
Pomógł: 2
Dołączył: 11.09.2013

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


  1. preg_match('/content=\"(.+)\swyników/', $file, $matchesResults);
  2. //print_r($matchesResults);
  3. $cut = str_split($matchesResults[1],1);
  4. foreach($cut as $c){
  5. echo $c.' : '.dechex(ord($c)).'<br />';
  6. }

Daje:
  1. 1 : 31
  2. 1 : 31
  3. &#65533; : c2 // Tu na wydruku jest pytajnik w czarnym rombie.
  4. &#65533; : a0 // Tu też.
  5. 2 : 32
  6. 4 : 34
  7. 8 : 38


Zrobię to tak jak pisałem wcześniej - wyszukując osobno obie części ciągu i później je łącząc.

Cytat(_Borys_ @ 12.09.2013, 14:11:29 ) *
Możesz sobie sprawdzić co tam masz w liczbie
  1. preg_match('/content=\"(.+)\swynik/', $file, $matchesResults);
  2. $cut = str_split($matchesResults[1],1);
  3. foreach($cut as $c){
  4. echo $c.' : '.dechex(ord($c)).'<br />';
  5. }

Wypisuje kolejne znaki z liczby i wartość hex, jeśli trzecia wartość 20 to jest spacja.
Więcej pomysłów nie mam.


To wystarczy (IMG:style_emoticons/default/smile.gif)
Swoim postem podsunąłeś mi rozwiązanie (IMG:style_emoticons/default/smile.gif)
Skoro tam są dwa jakieś znaki to wystarczy zrobić tak:
  1. $patternResults = '/content=\"(\d+.+)+wyników/';
  2. preg_match($patternResults, $file, $matchesResults);
  3. echo '<br />'.(int)preg_replace('#[^0-9.]#', '', $matchesResults[1]);


i mam to co mnie interesuje (IMG:style_emoticons/default/smile.gif)
Dzięki za pomoc (IMG:style_emoticons/default/biggrin.gif)

Ten post edytował qdlaty88 12.09.2013, 13:37:03
Go to the top of the page
+Quote Post

Posty w temacie


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: 14.10.2025 - 21:42