pobieranie danych ze strony preg_match

0

Witam wszystkich.
Chciałbym pobrać dane ze strony.

Strona z której chciałbym pobrać dane:
https://www.fabrykasily.pl/atlas-cwiczen/czworoglowe-uda/reverse-drop-lunges

Chcę pobrać dane: Mięśnie zaangażowane w ruch:
kod wygląda tak:

$pattern = "/\–.m\. (.*)\,/ix>";
if(preg_match_all($pattern, $str, $matches)) {
foreach($matches[0] as $miesnie1){
    echo "<pre>$cwicz	$miesnie1	$tytul[1]	https://static.fabrykasily.pl/atlas/$film[1].mp4 <br /></pre>";
}
}

Tytuł pobiera poprawnie. A co najdziwniejsze, z jednej strony pobiera a z drugiej już nie. Co robię źle?
Np. z tej pobiera wszystko https://www.fabrykasily.pl/atlas-cwiczen/klatka-piersiowa/wyciskanie-sztangi-na-lawce-skosnej-glowa-w-dol
a z tej już nie: https://www.fabrykasily.pl/atlas-cwiczen/czworoglowe-uda/przysiad-bulgarski-wersja-dla-miesnia-czworoglowego-uda

2

Wydaje mi się, że dlatego że na stronie https://www.fabrykasily.pl/atlas-cwiczen/czworoglowe-uda/przysiad-bulgarski-wersja-dla-miesnia-czworoglowego-uda pomiędzy myślnikiem a "m" (pomiędzy - a m) jest encja htmlowa &nbsp;, a nie spacja. a Twój wzorzec łapie -.m, czyli tylko jeden znak. Encja ma 5 znaków. Spróbuj zamienić to na /-(\s|&nbsp;)m czyli "biały znak lub nbsp".

  • Po pierwsze, to Twoj wzorzec jest niepoprawny. Co to jest za klamerka > na końcu, przy flagach? To jest niepoprawny PCRE.
  • Po drugie, po co używasz flagi x obok i? x ignoruje białe znaki we wzorcu, a mi to wygląda że chcesz złapać ten biały znak (spację)
  • Po trzecie, Twój zapis (.*) aż się prosi żeby zmatchowało cały dokument, zamiast tego co chcesz złapać. Użyj (.*?).
  • Po czwarte, to ja widzę że 3 wpisy na tych stronach kończą się przecinkiem, a ostatni kropką. Więc może zamist ,/ napisz [,.]/?

PS: @cerrato Czemu od razu nie zawołane? ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1