![]() |
![]() |
![]()
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:
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:
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:
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 |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 587 Pomógł: 190 Dołączył: 5.02.2011 Skąd: 64-800 Ostrzeżenie: (0%) ![]() ![]() |
a gdyby były liczby z kilkoma spacjami to bardziej właściwe będzie Ten post edytował _Borys_ 11.09.2013, 14:34:06 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 2 Dołączył: 11.09.2013 Ostrzeżenie: (0%) ![]() ![]() |
Niestety tak też nie działa. Na wydruku dostaję:
Wciąż brak dwóch pierwszych cyfr. Jak zmienię kod na: żeby sprawdzić czy w tablicy będzie interesująca mnie wartość, dostaję masę liczb ale nie tą której potrzebuję. Po wydrukowaniu zawartości zmiennej z wczytanym kodem widzę, że pojawia się ona w trzech miejscach. Nie mam już pomysłu jak wyciągnąć ilość wyników... Zrobiłem to na około wykorzystując takie wyrażenie regularne:
Dostaję teraz ciąg: Czyli już prawie to co chciałem (wygląda na to, że przerwa pomiędzy '11' a '248' to nie spacja. Jak to teraz wyczyścić, żeby dostać '11248'? daje na wydruku tylko liczbę '1'... |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 587 Pomógł: 190 Dołączył: 5.02.2011 Skąd: 64-800 Ostrzeżenie: (0%) ![]() ![]() |
$matchesResults[1] - tutaj masz samą liczbę ze spacją
Moje też działało, możliwe że jest więcej słów "wyników" Spróbuj tak a str_replace(); tak jak wyżej podałem |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 2 Dołączył: 11.09.2013 Ostrzeżenie: (0%) ![]() ![]() |
Daje na wydruku:
Sama ilość wyników w całym kodzie powtarza się trzykrotnie w różnym kontekście. Próbowałem już zmieniać ten kontekst. Problem tkwi w tej spacji dzielącej liczbę na dwie części. Jeśli do szukania wykorzystam wyrażenie:
To dostaję: 'content="11'. Dla:
Mam '248 wyników'. Wyrażenie:
Wyrzuca tablicę pełną różnych liczb znalezionych w kodzie ale nie ma wśród nich tej która jest mi niezbędna. Ciekawe jest to, że jak wyświetlę źródło strony w przeglądarce i skopiuję interesujący mnie fragment do pliku, który później załaduję do zmiennej za pomocą file_get_contents() to moje wyrażenie działa. Jeśli proces odbywa się automatycznie, czyli pobranie strony, zapis do pliku, pobranie z pliku i przeszukanie to działa jak powyżej... Kombinuję na wszystkie możliwe sposoby i nic... Ten post edytował qdlaty88 12.09.2013, 12:05:46 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 587 Pomógł: 190 Dołączył: 5.02.2011 Skąd: 64-800 Ostrzeżenie: (0%) ![]() ![]() |
Pokaż co zwróciło print_r($matchesResults);
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 2 Dołączył: 11.09.2013 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 587 Pomógł: 190 Dołączył: 5.02.2011 Skąd: 64-800 Ostrzeżenie: (0%) ![]() ![]() |
A jak wygląda ta linia z liczbą w pliku ?
Spróbuj z modyfikatorem m Ten post edytował _Borys_ 12.09.2013, 12:19:45 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 2 Dołączył: 11.09.2013 Ostrzeżenie: (0%) ![]() ![]() |
Problemem jest przerwa pomiędzy '11' a '248'. Wykasowałem tę przerwę i zastąpiłem ją spacją. Wczytałem plik do zmiennej i zatrybiło. Tam jest jakiś śmieć. Tylko jak się go pozbyć skoro nie wiadomo co to jest? |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 223 Pomógł: 27 Dołączył: 16.04.2008 Skąd: Bakutilu Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 2 Dołączył: 11.09.2013 Ostrzeżenie: (0%) ![]() ![]() |
Modyfikator m niestety nic nie zmienia.
|
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 587 Pomógł: 190 Dołączył: 5.02.2011 Skąd: 64-800 Ostrzeżenie: (0%) ![]() ![]() |
Jeśli to zadziała to masz coś nie tak z kodowaniem pliku. |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 2 Dołączył: 11.09.2013 Ostrzeżenie: (0%) ![]() ![]() |
Też tak robiłem i działało. Ale u Ciebie w $string pomiędzy '11' a '256' jest spacja, w kodzie jaki pobieram ze strony jest jakiś śmieć... Jeśli to zadziała to masz coś nie tak z kodowaniem pliku. Wyrzuca pustą tablicę. Zostawmy już te wyrażenia. Jeśli wyniku jaki daje mi '/content\"=.+wyników' nie da się wyczyścić to po prostu zrobię tak, że wyszukam najpierw 'content\"=\d+', później '\d+\swyników' i złożę to w jeden ciąg. Przynajmniej pozbędę się tej przerwy i dalej z górki ![]() Ten post edytował qdlaty88 12.09.2013, 12:57:02 |
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 587 Pomógł: 190 Dołączył: 5.02.2011 Skąd: 64-800 Ostrzeżenie: (0%) ![]() ![]() |
Możesz sobie sprawdzić co tam masz w liczbie
Wypisuje kolejne znaki z liczby i wartość hex, jeśli trzecia wartość 20 to jest spacja. Więcej pomysłów nie mam. |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 2 Dołączył: 11.09.2013 Ostrzeżenie: (0%) ![]() ![]() |
Daje:
Zrobię to tak jak pisałem wcześniej - wyszukując osobno obie części ciągu i później je łącząc. Możesz sobie sprawdzić co tam masz w liczbie
Wypisuje kolejne znaki z liczby i wartość hex, jeśli trzecia wartość 20 to jest spacja. Więcej pomysłów nie mam. To wystarczy ![]() Swoim postem podsunąłeś mi rozwiązanie ![]() Skoro tam są dwa jakieś znaki to wystarczy zrobić tak:
i mam to co mnie interesuje ![]() Dzięki za pomoc ![]() Ten post edytował qdlaty88 12.09.2013, 13:37:03 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 17:11 |