Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> wyrażenie regularne - wyciąganie tekstu
marcus753
post 29.04.2015, 11:22:11
Post #1





Grupa: Zarejestrowani
Postów: 281
Pomógł: 3
Dołączył: 8.06.2009
Skąd: Kraków

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


hmm ma ktoś pomysł dlaczego to nie działa ?

  1.  
  2. $text="
  3. sdafsdfsdfasdaf sdf asdf sdf<div id="data">
  4.  
  5. 25.04.2015
  6.  
  7.  
  8.  
  9.  
  10.  
  11. , aktualizacja: 23.04.2015 12:33
  12.  
  13. </div> sadfsadfsadfsadfsafsadfsdafsadf
  14. ";
  15.  
  16. preg_match('/<div id="data">(.*)<\/div>/', $text, $matches_date); //wyszukujemy date
  17. print_r($matches_date);



w odpowiedzi otrzymuję pustą tablice... dla autora i innych pul działa bez problemu - hmm co robię źle ? zostawiłem oryginalne formatowanie ze spacjami / tabulatorami

Próbowałem też coś takiego:
  1. preg_match('/<div id="data">([.\s]*)<\/div>/', $wynik, $matches_date);


Ten post edytował marcus753 29.04.2015, 11:23:55


--------------------
Cokolwiek zostanie upuszczone na uklad elektroniczny, spadnie zawsze tam gdzie wyrzadzi najwiecej szkody.
Go to the top of the page
+Quote Post
trueblue
post 29.04.2015, 11:40:09
Post #2





Grupa: Zarejestrowani
Postów: 6 805
Pomógł: 1827
Dołączył: 11.03.2014

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


Masz wielolinijkowy string.
Dodaj parametr s do wyrażenia: http://php.net/manual/en/reference.pcre.pa...n.modifiers.php


--------------------
Go to the top of the page
+Quote Post
marcus753
post 29.04.2015, 11:47:03
Post #3





Grupa: Zarejestrowani
Postów: 281
Pomógł: 3
Dołączył: 8.06.2009
Skąd: Kraków

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


@trueblue - dzięki za odpowiedź wink.gif idąc za twoją radą zrobiłem coś takiego:


  1. preg_match('/<div id="data">[\s\S]*<\/div>/', $wynik, $matches_date);


Problem w tym że teraz wykrywa mi poprawnie date ale ignoruje znak </div> i leci dalej... ehh

Ten post edytował marcus753 29.04.2015, 11:47:19


--------------------
Cokolwiek zostanie upuszczone na uklad elektroniczny, spadnie zawsze tam gdzie wyrzadzi najwiecej szkody.
Go to the top of the page
+Quote Post
trueblue
post 29.04.2015, 12:11:05
Post #4





Grupa: Zarejestrowani
Postów: 6 805
Pomógł: 1827
Dołączył: 11.03.2014

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


Nie, nie, parametr - nie token.

  1. preg_match('/<div id="data">(.*)<\/div>/s',$text, $matches_date);


--------------------
Go to the top of the page
+Quote Post
marcus753
post 29.04.2015, 12:18:42
Post #5





Grupa: Zarejestrowani
Postów: 281
Pomógł: 3
Dołączył: 8.06.2009
Skąd: Kraków

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


@trueblue - efekt niestety ten sam w odpowiedzi dostaje autora i całą resztę śmieci która jest za znacznikiem </div> - jest jakiś sposób na zmniejszenie zakresu preg_match ?


--------------------
Cokolwiek zostanie upuszczone na uklad elektroniczny, spadnie zawsze tam gdzie wyrzadzi najwiecej szkody.
Go to the top of the page
+Quote Post
trueblue
post 29.04.2015, 12:22:59
Post #6





Grupa: Zarejestrowani
Postów: 6 805
Pomógł: 1827
Dołączył: 11.03.2014

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


  1. $text='
  2. sdafsdfsdfasdaf sdf asdf sdf<div id="data">
  3.  
  4. 25.04.2015
  5.  
  6.  
  7.  
  8.  
  9.  
  10. , aktualizacja: 23.04.2015 12:33
  11.  
  12. </div> sadfsadfsadfsadfsafsadfsdafsadf
  13. ';
  14. preg_match('/<div id="data">(.*)<\/div>/s',$text, $matches_date); //wyszukujemy date
  15. print_r($matches_date);


--------------------
Go to the top of the page
+Quote Post
marcus753
post 29.04.2015, 12:39:23
Post #7





Grupa: Zarejestrowani
Postów: 281
Pomógł: 3
Dołączył: 8.06.2009
Skąd: Kraków

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


hmm z krótkim tekstem działa niestety ja mam nieco bardziej rozbudowaną wersje zmiennej $text w wyniku wyświetlając

  1. print_r($matches_date);


otrzymuje coś takiego:

  1. <div id="gazeta_article_date">
  2.  
  3. 25.04.2015
  4.  
  5.  
  6.  
  7.  
  8.  
  9. , aktualizacja: 23.04.2015 12:33
  10.  
  11. </div>
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23. <div id="gazeta_article_tools">
  24. <a class="font" data-size="small" href="#">A</a>
  25. <a class="font" data-size="normal" href="#">A</a>
  26. <a class="font" data-size="big" href="#">A</a>
  27.  
  28. <a href="http://www.wysokieobcasy.pl/wysokie-obcasy/2029020,142947,17791447.html" data-height="600" data-width="960" class="print pop" title="Drukuj" alt="Drukuj" rel="nofollow">Drukuj</a>
  29.  
  30. </div> <!-- #gazeta_article_tools -->


--------------------
Cokolwiek zostanie upuszczone na uklad elektroniczny, spadnie zawsze tam gdzie wyrzadzi najwiecej szkody.
Go to the top of the page
+Quote Post
trueblue
post 29.04.2015, 12:52:56
Post #8





Grupa: Zarejestrowani
Postów: 6 805
Pomógł: 1827
Dołączył: 11.03.2014

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


Pokaż zawartość zmiennej.


--------------------
Go to the top of the page
+Quote Post
marcus753
post 29.04.2015, 13:10:33
Post #9





Grupa: Zarejestrowani
Postów: 281
Pomógł: 3
Dołączył: 8.06.2009
Skąd: Kraków

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


zmienna jest cholernie długa (jest to zawartość strony) oto jej fragment:

  1. <!--232, MeasurableViewWrapper : PortalModuleView : DefaultModuleView : InheritingModuleInternalResourceView : /fix/modules/pathLego.jsp : /fix/modules/pathLego.jsp, pathIndexPojoBean-->
  2.  
  3. </div>
  4.  
  5.  
  6. <div id="gazeta_article" >
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32. <h1 class="artTitle">
  33.  
  34.  
  35. Piękni dwudziestoletni. Pazury mają, ale drapać nie potrafią
  36.  
  37. </h1>
  38.  
  39.  
  40.  
  41. <!--239, EmptyView : /fix/modules/belkaBlogoserwisy_p2gs.jsp, blogoBelkaPojoBean-->
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49. <div id="gazeta_article_author">Jerzy Ziemacki</div>
  50.  
  51.  
  52.  
  53. <div id="gazeta_article_date">
  54.  
  55. 25.04.2015
  56.  
  57.  
  58.  
  59.  
  60.  
  61. , aktualizacja: 23.04.2015 12:33
  62.  
  63. </div>
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.  
  75. <div id="gazeta_article_tools">
  76. <a class="font" data-size="small" href="#">A</a>
  77. <a class="font" data-size="normal" href="#">A</a>
  78. <a class="font" data-size="big" href="#">A</a>
  79.  
  80. <a href="http://www.wysokieobcasy.pl/wysokie-obcasy/2029020,142947,17791447.html" data-height="600" data-width="960" class="print pop" title="Drukuj" alt="Drukuj" rel="nofollow">Drukuj</a>
  81.  
  82. </div> <!-- #gazeta_article_tools -->
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107. <!-- 0/4,17785120 -->
  108. <!-- 1/4,17791475 -->
  109. <!-- 2/4,17791490 -->
  110. <!-- 3/4,17791520 -->
  111.  
  112.  
  113.  
  114. <div id="gazeta_article_image" class="miniatures"><!-- rel max = 4 -->
  115. <div>
  116.  
  117. <a href="51,142947,17791447.html?i=0"><img border=0 src="http://bi.gazeta.pl/im/b8/f9/10/z17801144Q,Klubokawiarnie-nad-Wisla-w-Warszawie.jpg" title="Klubokawiarnie nad Wisla w Warszawie" alt="Klubokawiarnie nad Wisla w Warszawie"></a>
  118.  
  119.  
  120. <script>
  121. var gazeta_pl = gazeta_pl || {};
  122. gazeta_pl.ArticleGalleryLinks = {
  123. next:'51,142947,17791447.html?i=1'
  124. };
  125. </script>
  126.  


chciałbym z niej wyciągnąć autora i date publikacji o ile z autorem nie mam żadnego problemu to z publikacją nie mogę sobie poradzić ehh


EDIT

poradziłem sobie w ten sposób:

  1. preg_match('/<div id="gazeta_article_date">([0-pa-z\.\,\:\s]*)<\/div>/s',$wynik, $matches_date);
czyli ograniczyłem znaki możliwe między tagami. Gdybym jednak chciał dopuścić tam wszystkie możliwe znaki to nie mam pojęcia jak mógłbym to wyciągnąć...

Ten post edytował marcus753 29.04.2015, 13:20:19


--------------------
Cokolwiek zostanie upuszczone na uklad elektroniczny, spadnie zawsze tam gdzie wyrzadzi najwiecej szkody.
Go to the top of the page
+Quote Post
trueblue
post 29.04.2015, 13:31:04
Post #10





Grupa: Zarejestrowani
Postów: 6 805
Pomógł: 1827
Dołączył: 11.03.2014

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


  1. preg_match('/<div id="gazeta_article_date">(.*?)<\/div>/s',$text, $matches_date);


http://www.rexegg.com/regex-quantifiers.html#lazy_solution

Ten post edytował trueblue 29.04.2015, 13:44:48


--------------------
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: 3.07.2025 - 08:07