Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Parsowanie pliku linia po lini w celu wyciągnięcia z pliku lini tylko pasujących do regexp
Forum PHP.pl > Forum > PHP
dugem_grubi
Witam,

mam w pliku zapisane różnego rodzaju linki w postaci http://costam.coastam.pl

Potrzebuję wybrać tylko te linie pliku, które odpowiadają wyrażeniu regularnemu. To wyrażenie już mam. I teraz chodzi mi o wykonanie następującej rzeczy tj. Wyciągnięcie w pętli linków i tylko dla pasujących do regexp wykonanie kolejnych działań. Sam plik nie jest duży, bo ma maksymalnie 500 linków.

Jak podejśc najlepiej do tego zagadnienia. Możecie mi pomóc?

Uriziel01
Jakikolwiek przykład (kawałek tego pliku najlepiej) będzie potrzebny, inaczej to strzelanie na 'oślep' niestety.
dugem_grubi
Plik wygląda tak:


  1. https://domena.pl/Domena.Public.UI/Search.aspx#
  2. <a href="https://domena.pl/" target="_blank">https://domena.pl/</a>
  3. <a href="http://domena.pl/Domena.CMS.ENGINE/" target="_blank">http://domena.pl/Domena.CMS.ENGINE/</a>
  4. <a href="https://domena.pl/Domena.Public.UI/Search.aspx#" target="_blank">https://domena.pl/Domena.Public.UI/Search.aspx#</a>
  5. <a href="https://domena.pl/Pomoc.aspx?target=L0NFSURHL0NFSURHLlB1YmxpYy5VSS9TZWFyY2guYXNweA%3d%3d" target="_blank">https://domena.pl/Pomoc.aspx?target=L0NFSUR...2guYXNweA%3d%3d</a>
  6. <a href="https://domena.pl/DOMENA.Public.UI/DecisionAdditionalParameters.aspx?type=1" target="_blank">https://domena.pl/DOMENA.Public.UI/Decision...ers.aspx?type=1</a>
  7. <a href="https://domena.pl/DOMENA.Public.UI/DecisionAdditionalParameters.aspx?type=2" target="_blank">https://domena.pl/DOMENA.Public.UI/Decision...ers.aspx?type=2</a>
  8. <a href="https://domena.pl/DOMENA.Public.UI/DecisionAdditionalParameters.aspx?type=3" target="_blank">https://domena.pl/DOMENA.Public.UI/Decision...ers.aspx?type=3</a>
  9. <a href="https://domena.pl/DOMENA.Public.UI/DecisionAdditionalParameters.aspx?type=4" target="_blank">https://domena.pl/DOMENA.Public.UI/Decision...ers.aspx?type=4</a>
  10. <a href="https://domena.pl/DOMENA.Public.UI/DecisionAdditionalParameters.aspx?type=5" target="_blank">https://domena.pl/DOMENA.Public.UI/Decision...ers.aspx?type=5</a>
  11.  
  12. <a href="https://domena.pl/DOMENA.public.ui/ViewProposal.aspx" target="_blank">https://domena.pl/DOMENA.public.ui/ViewProposal.aspx</a>
  13. java script:OpenPopup('https://domena.pl/DOMENA.cms.engine/?D;c4ecfe54-6505-45f4-b9cd-f3b0907e6541')
  14. <a href="https://domena.pl/DOMENA.Public.UI/Search.aspx#" target="_blank">https://domena.pl/DOMENA.Public.UI/Search.aspx#</a>
  15. <a href="https://domena.pl/DOMENA.Public.UI/SearchDetails.aspx?Id=0e3b6339-f8d7-4550-bd3a-5a5f3fc9bb2c" target="_blank">https://domena.pl/DOMENA.Public.UI/SearchDe...3a-5a5f3fc9bb2c</a>
  16. <a href="https://domena.pl/DOMENA.Public.UI/SearchDetails.aspx?Id=0e3b6339-f8d7-4550-bd3a-5a5f3fc9bb2c" target="_blank">https://domena.pl/DOMENA.Public.UI/SearchDe...3a-5a5f3fc9bb2c</a>
  17. <a href="https://domena.pl/DOMENA.Public.UI/SearchDetails.aspx?Id=0e3b6339-f8d7-4550-bd3a-5a5f3fc9bb2c" target="_blank">https://domena.pl/DOMENA.Public.UI/SearchDe...3a-5a5f3fc9bb2c</a>
  18. java script:searchJS.SelectChoise(
  19. <a href="https://domena.pl/DOMENA.Public.UI/SearchDetails.aspx?Id=2b6ba670-8854-4c09-9693-2fbe5cebc0af" target="_blank">https://domena.pl/DOMENA.Public.UI/SearchDe...93-2fbe5cebc0af</a>
  20. <a href="https://domena.pl/DOMENA.Public.UI/SearchDetails.aspx?Id=2b6ba670-8854-4c09-9693-2fbe5cebc0af" target="_blank">https://domena.pl/DOMENA.Public.UI/SearchDe...93-2fbe5cebc0af</a>
  21. <a href="https://domena.pl/DOMENA.Public.UI/SearchDetails.aspx?Id=2b6ba670-8854-4c09-9693-2fbe5cebc0af" target="_blank">https://domena.pl/DOMENA.Public.UI/SearchDe...93-2fbe5cebc0af</a>
  22. java script:searchJS.SelectChoise(
  23. <a href="https://domena.pl/DOMENA.Public.UI/SearchDetails.aspx?Id=f789b479-5a92-4bb3-bb5f-e132449f29a7" target="_blank">https://domena.pl/DOMENA.Public.UI/SearchDe...5f-e132449f29a7</a>
  24. <a href="https://domena.pl/DOMENA.Public.UI/SearchDetails.aspx?Id=f789b479-5a92-4bb3-bb5f-e132449f29a7" target="_blank">https://domena.pl/DOMENA.Public.UI/SearchDe...5f-e132449f29a7</a>
  25. <a href="https://domena.pl/DOMENA.Public.UI/SearchDetails.aspx?Id=f789b479-5a92-4bb3-bb5f-e132449f29a7" target="_blank">https://domena.pl/DOMENA.Public.UI/SearchDe...5f-e132449f29a7</a>


mnie interesują tylko pojedyncze linie zawierające linki w postaci: https://domena.pl/DOMENA.Public.UI/SearchDe...5f-e132449f29a7
dla tego regexp mam taki:
  1. /<a\s[^>]*href=\"SearchDetails.aspx([^\"]*)\"[^>]*>(.*)<\/a>/siU


Sam plik txt to sparsowana strona www, z której wyjąłem wszystkie linki <a nhref....

Uriziel01
Hmmm, nie jestem do końca pewien czy dobrze zrozumiałem, ale wygląda na to że tak:
  1. <?PHP
  2. $content = '
  3. <pre>https://domena.pl/Domena.Public.UI/Search.aspx#
  4. <a href="https://domena.pl/" target="_blank">https://domena.pl/</a>
  5. <a href="http://domena.pl/Domena.CMS.ENGINE/" target="_blank">http://domena.pl/Domena.CMS.ENGINE/</a>
  6. <a href="https://domena.pl/Domena.Public.UI/Search.aspx#" target="_blank">https://domena.pl/Domena.Public.UI/Search.aspx#</a>
  7. <a href="https://domena.pl/Pomoc.aspx?target=L0NFSURHL0NFSURHLlB1YmxpYy5VSS9TZWFyY2guYXNweA%3d%3d" target="_blank">https://domena.pl/Pomoc.aspx?target=L0NFSUR...2guYXNweA%3d%3d</a>
  8. <a href="https://domena.pl/DOMENA.Public.UI/DecisionAdditionalParameters.aspx?type=1" target="_blank">https://domena.pl/DOMENA.Public.UI/Decision...ers.aspx?type=1</a>
  9. <a href="https://domena.pl/DOMENA.Public.UI/DecisionAdditionalParameters.aspx?type=2" target="_blank">https://domena.pl/DOMENA.Public.UI/Decision...ers.aspx?type=2</a>
  10. <a href="https://domena.pl/DOMENA.Public.UI/DecisionAdditionalParameters.aspx?type=3" target="_blank">https://domena.pl/DOMENA.Public.UI/Decision...ers.aspx?type=3</a>
  11. <a href="https://domena.pl/DOMENA.Public.UI/DecisionAdditionalParameters.aspx?type=4" target="_blank">https://domena.pl/DOMENA.Public.UI/Decision...ers.aspx?type=4</a>
  12. <a href="https://domena.pl/DOMENA.Public.UI/DecisionAdditionalParameters.aspx?type=5" target="_blank">https://domena.pl/DOMENA.Public.UI/Decision...ers.aspx?type=5</a>
  13.  
  14. <a href="https://domena.pl/DOMENA.public.ui/ViewProposal.aspx" target="_blank">https://domena.pl/DOMENA.public.ui/ViewProposal.aspx</a>
  15. java script:OpenPopup('https://domena.pl/DOMENA.cms.engine/?D;c4ecfe54-6505-45f4-b9cd-f3b0907e6541')
  16. <a href="https://domena.pl/DOMENA.Public.UI/Search.aspx#" target="_blank">https://domena.pl/DOMENA.Public.UI/Search.aspx#</a>
  17. <a href="https://domena.pl/DOMENA.Public.UI/SearchDetails.aspx?Id=0e3b6339-f8d7-4550-bd3a-5a5f3fc9bb2c" target="_blank">https://domena.pl/DOMENA.Public.UI/SearchDe...3a-5a5f3fc9bb2c</a>
  18. <a href="https://domena.pl/DOMENA.Public.UI/SearchDetails.aspx?Id=0e3b6339-f8d7-4550-bd3a-5a5f3fc9bb2c" target="_blank">https://domena.pl/DOMENA.Public.UI/SearchDe...3a-5a5f3fc9bb2c</a>
  19. <a href="https://domena.pl/DOMENA.Public.UI/SearchDetails.aspx?Id=0e3b6339-f8d7-4550-bd3a-5a5f3fc9bb2c" target="_blank">https://domena.pl/DOMENA.Public.UI/SearchDe...3a-5a5f3fc9bb2c</a>
  20. java script:searchJS.SelectChoise(
  21. <a href="https://domena.pl/DOMENA.Public.UI/SearchDetails.aspx?Id=2b6ba670-8854-4c09-9693-2fbe5cebc0af" target="_blank">https://domena.pl/DOMENA.Public.UI/SearchDe...93-2fbe5cebc0af</a>
  22. <a href="https://domena.pl/DOMENA.Public.UI/SearchDetails.aspx?Id=2b6ba670-8854-4c09-9693-2fbe5cebc0af" target="_blank">https://domena.pl/DOMENA.Public.UI/SearchDe...93-2fbe5cebc0af</a>
  23. <a href="https://domena.pl/DOMENA.Public.UI/SearchDetails.aspx?Id=2b6ba670-8854-4c09-9693-2fbe5cebc0af" target="_blank">https://domena.pl/DOMENA.Public.UI/SearchDe...93-2fbe5cebc0af</a>
  24. java script:searchJS.SelectChoise(
  25. <a href="https://domena.pl/DOMENA.Public.UI/SearchDetails.aspx?Id=f789b479-5a92-4bb3-bb5f-e132449f29a7" target="_blank">https://domena.pl/DOMENA.Public.UI/SearchDe...5f-e132449f29a7</a>
  26. <a href="https://domena.pl/DOMENA.Public.UI/SearchDetails.aspx?Id=f789b479-5a92-4bb3-bb5f-e132449f29a7" target="_blank">https://domena.pl/DOMENA.Public.UI/SearchDe...5f-e132449f29a7</a>
  27. <a href="https://domena.pl/DOMENA.Public.UI/SearchDetails.aspx?Id=f789b479-5a92-4bb3-bb5f-e132449f29a7" target="_blank">https://domena.pl/DOMENA.Public.UI/SearchDe...5f-e132449f29a7</a>
  28. </pre>';
  29. preg_match_all('/<a\s[^>]*href=\"(.*)SearchDetails.aspx([?])([^\"]*)\"[^>]*>(.*)<\/a>/siU', $content, $matches);
  30. var_dump($matches[3]);
  31. var_dump($matches[4]);
  32. foreach ($matches[3] as $match) {
  33. //jakieś_operacje na znalezionych linkach
  34. }
  35. ?>
dugem_grubi
Przez to formatowanie wprowadziłem Cię w błąd zmienna $content wygłąda następująco:
$content= '<pre>https://domena.pl/Domena.Public.UI/Search.aspx#
https://domena.pl/
http://domena.pl/Domena.CMS.ENGINE/
https://domena.pl/Domena.Public.UI/Search.aspx#
https://domena.pl/Pomoc.aspx?target=L0NFSUR...2guYXNweA%3d%3d
https://domena.pl/DOMENA.Public.UI/Decision...ers.aspx?type=1
https://domena.pl/DOMENA.Public.UI/Decision...ers.aspx?type=2
https://domena.pl/DOMENA.Public.UI/Decision...ers.aspx?type=3
https://domena.pl/DOMENA.Public.UI/Decision...ers.aspx?type=4
https://domena.pl/DOMENA.Public.UI/Decision...ers.aspx?type=5

https://domena.pl/DOMENA.public.ui/ViewProposal.aspx
java script:OpenPopup('https://domena.pl/DOMENA.cms.engine/?D;c4ecfe54-6505-45f4-b9cd-f3b0907e6541')
https://domena.pl/DOMENA.Public.UI/Search.aspx#
https://domena.pl/DOMENA.Public.UI/SearchDe...3a-5a5f3fc9bb2c
https://domena.pl/DOMENA.Public.UI/SearchDe...3a-5a5f3fc9bb2c
https://domena.pl/DOMENA.Public.UI/SearchDe...3a-5a5f3fc9bb2c
java script:searchJS.SelectChoise(
https://domena.pl/DOMENA.Public.UI/SearchDe...93-2fbe5cebc0af
https://domena.pl/DOMENA.Public.UI/SearchDe...93-2fbe5cebc0af
https://domena.pl/DOMENA.Public.UI/SearchDe...93-2fbe5cebc0af
java script:searchJS.SelectChoise(
https://domena.pl/DOMENA.Public.UI/SearchDe...5f-e132449f29a7
https://domena.pl/DOMENA.Public.UI/SearchDe...5f-e132449f29a7
https://domena.pl/DOMENA.Public.UI/SearchDe...5f-e132449f29a7
</pre>';

Czyli już odfiltrowałem wszystkie znakczniki html i mam gołe linki.

Potrzebuję takiego regexp, żeby wyciągał adresy z "SearchDetails.aspx" i usunął duplikaty.
Próbowałem zrobić w twoim kodzie regexp '*SearchDetails.aspx* , ale jakoś mi to nie działa.
Uriziel01
No to mamy już chyba klarowną sytuację, chociaż z tego co teraz zrozumiałem to dziwi mnie odrobinę że udało ci się rozwiązać część pierwszą która była de-facto trudniejsza od tej tongue.gif :
Cytat


EDIT:
Wrrrr. Silnik edytora jest dla mnie zbyt łaskawy i sam uzupełnił kod o linki jak widzę... zaraz poprawię.
erix
Jasne, wczytywać cały plik do pamięci tylko po to, aby wyciągnąć z niego coś, co można zrobić strumieniowo.

Uwielbiacie marnować pamięć.

fgets, FTW.
dugem_grubi
Uriziel01,

właśnie o to mi chodziło. Ja potrafię to procesować poprzez pliki, bo muszę to porozkłądać na mniejsze elementy logiczne. Ale mam teraz kolejną sprawę.

Jak rozwiązać sprawę, żeby ze strony wczytanej poprzez funkcję: file_get_html() znaleźć wszystkie maile i je właśnie zapisać do maila.

Dane dotyczące maila są dokładnie w formacie:

  1. <td>
  2. <span id="MainContent_lblEmail" style="font-size:Small;font-weight:bold;"><a style='text-decoration:none;' href="mailto:imie@domena.pl">imie@domena.pl</a></span>
  3. </td>

Może mi ktoś z tym pomóc?


OK chyba udało mi się to zrobić samemu:

  1. if (preg_match('/"mailto:([^"]+)/', $stronka, $matchesstronka) && false !== ($info = parse_url($matchesstronka[1]))) {
  2. $emailAddress = $info['path'];
  3. $emailParameters = array();
  4. if (isset($info['query'])) {
  5. parse_str($info['query'], $emailParameters);
  6. }
  7. var_dump($emailAddress, $emailParameters);


Uriziel01
Cytat(erix @ 26.09.2012, 12:36:04 ) *
Jasne, wczytywać cały plik do pamięci tylko po to, aby wyciągnąć z niego coś, co można zrobić strumieniowo.

Uwielbiacie marnować pamięć.

fgets, FTW.


Przy 500 liniowym pliku ? Absolutnie nie istotne względem tematu niestety... równie dobrze mógłbym zacząć bawić się w przepisanie tego na 2x strpos() lub zamiana podwójnych cudzysłowów na pojedyncze zamiast napisać kod który ROZWIĄŻE problem z którym pojawił się użytkownik.
Pozdrawiam i oczywiście (mimo wszystko) dziękuję za komentarz.
erix
Cytat
Przy 500 liniowym pliku ? Absolutnie nie istotne względem tematu niestety... równie dobrze mógłbym zacząć bawić się w przepisanie tego na 2x strpos()

Z doświadczenia - zaczyna się od małego, a potem trzeba pisać od zera. [; Dobre nawyki lepiej wypracować od samego początku.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.