Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyrażenie regularne - wyciąganie tekstu
Forum PHP.pl > Forum > PHP
marcus753
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);
trueblue
Masz wielolinijkowy string.
Dodaj parametr s do wyrażenia: http://php.net/manual/en/reference.pcre.pa...n.modifiers.php
marcus753
@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
trueblue
Nie, nie, parametr - nie token.

  1. preg_match('/<div id="data">(.*)<\/div>/s',$text, $matches_date);
marcus753
@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 ?
trueblue
  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);
marcus753
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 -->
trueblue
Pokaż zawartość zmiennej.
marcus753
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ąć...
trueblue
  1. preg_match('/<div id="gazeta_article_date">(.*?)<\/div>/s',$text, $matches_date);


http://www.rexegg.com/regex-quantifiers.html#lazy_solution
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.