[PHP]Wyrażenia regularne w PHP, Wyrażenie regularne pokazujące wybraną zawartość. |
[PHP]Wyrażenia regularne w PHP, Wyrażenie regularne pokazujące wybraną zawartość. |
21.05.2015, 13:31:44
Post
#1
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 13.05.2015 Ostrzeżenie: (0%) |
Witam !
Mam taki problem, ponieważ nie wiem jak napisać wyrażenie które bedzie mi pokazywało w pliku test.txt tylko to co wybiore. Oto kod PHP:
A tak wygląda wyodrębniona zawartość:
W pliku mam więcej takich "wiadomości" lecz ja chcę aby w pliku test.txt zapisywała się wiadomość o konkretnym hashtagu czyli w tym wypadku A1 czyli wiadomość ABCD i najlepiej bez znaczników HTML.. Wiem , że zapis (.*) pobiera wszystko bez wyjątku.. Czy to w ogóle możliwe ? Proszę o pomoc w napisaniu wyrażenia regularnego które będzie wyznaczało tylko konkretną wiadomość .. Ten post edytował Kashikumek 21.05.2015, 13:33:07 |
|
|
21.05.2015, 15:07:57
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 268 Pomógł: 254 Dołączył: 11.06.2009 Skąd: Świętochłowice Ostrzeżenie: (0%) |
Skoro to kawałki HTML, to może potraktować to DOM-em? (Ależ ja mam obsesję )
-------------------- ★Mój blog || Okiem krytyka★
|
|
|
21.05.2015, 15:17:45
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 240 Pomógł: 278 Dołączył: 11.03.2008 Ostrzeżenie: (0%) |
Parasowanie HTML-a przy użyciu wyrażeń regularnych nie będzie działać poprawnie (wyjaśnienie).
Proponuję użyć (jak kolega wyżej napisał) np. http://simplehtmldom.sourceforge.net/ Ten post edytował markuz 21.05.2015, 15:18:36 -------------------- |
|
|
21.05.2015, 15:18:54
Post
#4
|
|
Grupa: Moderatorzy Postów: 36 477 Pomógł: 6301 Dołączył: 27.12.2004 |
@markuz a to niby czemu? HTML to tekst jak kazdy inny. Jak tylko spelnia szukane wzorce to bedzie działać.
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
21.05.2015, 17:27:26
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 268 Pomógł: 254 Dołączył: 11.06.2009 Skąd: Świętochłowice Ostrzeżenie: (0%) |
@markuz, @nospor http://forum.php.pl/index.php?showtopic=24...t&p=1158915
Owszem, parsowanie HTML-a regexem przy założeniu, że spełnia on wzorzec jest możliwe… ale stwierdzenie, że HTML (zwłaszcza gdy poczytamy sobie na co pozwala specyfikacja HTML5) spełnia wzorzec to jedynie pobożne życzenie. -------------------- ★Mój blog || Okiem krytyka★
|
|
|
21.05.2015, 19:38:24
Post
#6
|
|
Grupa: Zarejestrowani Postów: 139 Pomógł: 24 Dołączył: 12.05.2013 Skąd: Hamburg Ostrzeżenie: (0%) |
W pełni zgadzam się z przedmówcą. Owszem, regexpem się da, tylko po co? Muche też można z armaty załatwić...
Po prostu DOM jest szybszy, prostszy i bardziej czytelny. Nie trzeba żadnych zewnętrznych bibliotek. Najprostszy simplexml powinien sobie poradzić. A jak nie to PHP też ma DOM albo ładny obiektowy wrapper fDOMDocument (https://github.com/theseer/fDOMDocument) (ale to już też zakrawa na armatę...) |
|
|
21.05.2015, 20:20:09
Post
#7
|
|
Grupa: Moderatorzy Postów: 36 477 Pomógł: 6301 Dołączył: 27.12.2004 |
Cytat ale stwierdzenie, że HTML (zwłaszcza gdy poczytamy sobie na co pozwala specyfikacja HTML5) spełnia wzorzec to jedynie pobożne życzenie. bez zartow... kod html strony nie zmienia się losowa co pol godziny... to jest kod, ktory jest generowany z szablonu i zmienia sie dopiero gdy ktos zmieni szablon wiec naprawde nie wiem o co wam chodzi. Rownie dobrze ktos zmieni szablon i te wasze wszystkie DOMy tez szlag trafi.Cytat Muche też można z armaty załatwić... Ke? Ze niby regexp w porownaniu do DOMa to armata??
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
21.05.2015, 20:41:54
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 268 Pomógł: 254 Dołączył: 11.06.2009 Skąd: Świętochłowice Ostrzeżenie: (0%) |
Cytat to jest kod, ktory jest generowany z szablonu Czasami szablon może się wykrzaczyć z powodu danych z zewnątrz… Bardziej chodzi mi raczej o samo traktowanie HTML jako stringa, bo tutaj upatrywałbym całego problemu. HTML to IMO tekstowy zapis przestrzennej struktury, jaką jest DOM i jako taka powinna być traktowana. Chociaż w sumie to już zależy co nas bardziej interesuje: kod jako kod czy to, co ten kod tworzy (bo kod bardzo często może się różnić od tego, co następnie uzyskamy w DOM). Stąd wziął mi się wzór niezgodny ze specką (no nie umiem myśleć o HTML jedynie jako o stringu - być może to już zboczenie ) Cytat Ze niby regexp w porownaniu do DOMa to armata?? Regex jest strasznie low-levelowy… DOM to jednak bardzo pomocna abstrakcja
Pewnie, można low-levelowo… ale ja tam wybiorę wygodę -------------------- ★Mój blog || Okiem krytyka★
|
|
|
22.05.2015, 06:28:45
Post
#9
|
|
Grupa: Moderatorzy Postów: 36 477 Pomógł: 6301 Dołączył: 27.12.2004 |
Cytat Czasami szablon może się wykrzaczyć z powodu danych z zewnątrz? Tak, ale wtedy równie dobrze może szlag trafić Twój DOM, bo zakladasz ze jest tak i tak, a tu nagle ktos daną z zewnatrz zamknie dwa divy, otworzy kolejne o innych klasach i zonkCytat Pewnie, można low-levelowo? ale ja tam wybiorę wygodę Bys sie nadawał na polityka... podajesz przykłady do o wiele prostrzyszch rzeczy niz mówimy w tym temacie i czym argumentujesz swoją rację W tym temacie nie chodziło o pobranie elementu po ID. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
22.05.2015, 09:19:48
Post
#10
|
|
Grupa: Zarejestrowani Postów: 139 Pomógł: 24 Dołączył: 12.05.2013 Skąd: Hamburg Ostrzeżenie: (0%) |
Ke? Ze niby regexp w porownaniu do DOMa to armata?? Dobrze, nazwijmy to niewłaściwym narzędziem do rozwiązania akurat tego problemu. Jak napisał Comandeer, autor chce parsować DOM a nie string
Wynik: Kod ABCD
|
|
|
22.05.2015, 09:57:48
Post
#11
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 13.05.2015 Ostrzeżenie: (0%) |
Użyłem kodu powyżej ..
CODE Fatal error: Call to a member function item() on a non-object in /home/u682868681/public_html/index.php on line 70 w czym błąd Dodam iż potrzebuje aby "czyste wiadomości" były zapisywane w odrębnym pliku.. to jest linijka 70: Kod echo trim($elements->item(0)->childNodes->item($elements->item(0)->childNodes->length - 1)->textContent);
Ten post edytował Kashikumek 22.05.2015, 10:01:21 |
|
|
22.05.2015, 10:22:10
Post
#12
|
|
Grupa: Zarejestrowani Postów: 1 268 Pomógł: 254 Dołączył: 11.06.2009 Skąd: Świętochłowice Ostrzeżenie: (0%) |
@nospor ok, ale nawet przy takiej strukturze mam do wyboru proste relacje albo wzór do całego stringu.
@Kashikumek a co masz w $elements? -------------------- ★Mój blog || Okiem krytyka★
|
|
|
22.05.2015, 12:15:43
Post
#13
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 13.05.2015 Ostrzeżenie: (0%) |
Jeśli chodzi Ci o to :
CODE $elements = $xpath->query("//p[contains(concat(' ', @class, ' '), ' ProfileTweet-text ')]//a[contains(@href,'hashtag/A1')]/ancestor:"); Dopiero rozpoczynam zabawę z PHP itd .. dlatego piszę to w tym dziale . Myśle że nie wytłumaczyłem jasno problemu .. posiadam stronę w której jest kod PHP .. ta strona tworzy mi plik w xml w której są wszystkie wiadomości twittera .. a ja chcę aby w tym pliku albo innym (odrębnym) były tylko wiadomości które posiadają na #A1... Z góry przepraszam jeśli piszę bzdury.. No dobra a jak by to wyglądało w regexpie ? @nospor Mógłbyś mi to jakoś objaśnić ? |
|
|
22.05.2015, 13:50:03
Post
#14
|
|
Grupa: Zarejestrowani Postów: 139 Pomógł: 24 Dołączył: 12.05.2013 Skąd: Hamburg Ostrzeżenie: (0%) |
Ktoś się nawet nie raczył pofatygować do dokumentacji, żeby zrozumieć, co się dzieje...
Poza tym, jesteś świadomy, że strona, którą ładujesz nie zawiera ani jednego elementu z klasą "ProfileTweet-text"? Wyrażenia regularne w niczym ci nie pomogą. Problem jest w zupełnie innym miejscu... Tam po prostu nie ma tego, czego szukasz... Proponowałbym spróbować ze kontem, na którym są jakieś posty :) Ten post edytował Xelah 22.05.2015, 13:51:41 |
|
|
22.05.2015, 14:34:53
Post
#15
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 13.05.2015 Ostrzeżenie: (0%) |
@Xelah
Zmieniłem stronę i działa .. Lecz jak tą zawartość (wiadomości) zapisać jako plik tekstowy ?, |
|
|
22.05.2015, 14:51:18
Post
#16
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
np. file_put_contents
|
|
|
25.05.2015, 11:14:39
Post
#17
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 13.05.2015 Ostrzeżenie: (0%) |
Niestety, taki jest efekt użycia file_put_contents..
CODE Fatal error: Cannot use object of type DOMElement as array in /home/u682868681/public_html/index.php Ten post edytował Kashikumek 25.05.2015, 11:15:09 |
|
|
25.05.2015, 11:44:06
Post
#18
|
|
Grupa: Zarejestrowani Postów: 139 Pomógł: 24 Dołączył: 12.05.2013 Skąd: Hamburg Ostrzeżenie: (0%) |
Niestety, taki jest efekt użycia file_put_contents.. Z czystej ciekawości, czytałeś może dokumentację do PHP? Coś takiego na prawdę istnieje. Proponuję zacząć od tego, zanim weźniesz się za pisanie jakiego kolwiek kodu. Polecam zacząć od: http://php.net/manual/en/langref.php a potem: http://php.net/manual/en/funcref.php Bo niestety widać, że nie zadałeś sobie nawet tyle trudu, żeby przeczytać dokumentację do tego, czego próbujesz użyć. Klepiesz na oślep kod i liczysz na to, że może coś zadziała. A jak nie działa to na forum z kolejnym pytaniem... |
|
|
27.05.2015, 13:53:14
Post
#19
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 13.05.2015 Ostrzeżenie: (0%) |
Mówiłem że jestem początkujący i tak, wiem że istnieje dokumentacja PHP .. zapoznaję się z nią krok po kroku .. i to nie jest tak że wale na oślep bo może zadziała, tylko staram się jednak coś zrobić i dopiero gdy już nie mam pojęcia to pytam na forum.. Rozumiem to że przyszedł kolejny "zielony" i chce gotowce.. ale nie ja też staram się czegoś nauczyć .. a że zaczynam przygodę z PHP to robię mnóstwo błędów ...
Staram się szukać, doczytać, popytać .. |
|
|
27.05.2015, 14:07:13
Post
#20
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) |
Po pierwsze nie zaciągaj danych bezpośrednio ze strony Twittera! Przecież ten serwis udostępnia normalne API do wyciągania tego typu informacji: https://dev.twitter.com/rest/public
Próba wyciągania tego z HTML-a bardzo szybko przestanie działać (przecież to jest aktywnie rozwijany serwis), a API pozostanie prawdopodobnie na zawsze niezmienne. |
|
|
Wersja Lo-Fi | Aktualny czas: 5.06.2024 - 08:41 |