Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Parsowanie pliku linia po lini w celu wyciągnięcia z pliku lini tylko pasujących do regexp
dugem_grubi
post 25.09.2012, 18:52:41
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 24.09.2012

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


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?

Go to the top of the page
+Quote Post
Uriziel01
post 25.09.2012, 18:54:31
Post #2





Grupa: Zarejestrowani
Postów: 307
Pomógł: 37
Dołączył: 9.11.2010
Skąd: Zielona Góra

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


Jakikolwiek przykład (kawałek tego pliku najlepiej) będzie potrzebny, inaczej to strzelanie na 'oślep' niestety.
Go to the top of the page
+Quote Post
dugem_grubi
post 25.09.2012, 19:01:03
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 24.09.2012

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


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....

Go to the top of the page
+Quote Post
Uriziel01
post 25.09.2012, 20:01:57
Post #4





Grupa: Zarejestrowani
Postów: 307
Pomógł: 37
Dołączył: 9.11.2010
Skąd: Zielona Góra

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


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. ?>
Go to the top of the page
+Quote Post
dugem_grubi
post 25.09.2012, 21:25:17
Post #5





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 24.09.2012

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


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.
Go to the top of the page
+Quote Post
Uriziel01
post 26.09.2012, 01:48:50
Post #6





Grupa: Zarejestrowani
Postów: 307
Pomógł: 37
Dołączył: 9.11.2010
Skąd: Zielona Góra

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


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ę.

Ten post edytował Uriziel01 26.09.2012, 01:53:53
Go to the top of the page
+Quote Post
erix
post 26.09.2012, 11:36:04
Post #7





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
dugem_grubi
post 27.09.2012, 07:02:08
Post #8





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 24.09.2012

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


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);


Go to the top of the page
+Quote Post
Uriziel01
post 27.09.2012, 07:49:26
Post #9





Grupa: Zarejestrowani
Postów: 307
Pomógł: 37
Dołączył: 9.11.2010
Skąd: Zielona Góra

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


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.
Go to the top of the page
+Quote Post
erix
post 27.09.2012, 08:24:33
Post #10





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 16.07.2025 - 19:38