Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Jak wyciągnąć tekst za pomocą preg_match
Forum PHP.pl > Forum > Przedszkole
XnIcRaM
Jak z poniższego kodu za pomocą preg_match wyciągnąć liczbę znajdującą się w znacznikach <b></b>, we fragmencie "Znaleziono <b>XXXX</b> pasujących odnośników<br>", zaznaczę tylko że wklejony przezemnie kod to tylko niewielki fragment całości, więc wyciągnięcie bezpośrednio z <b></b> odpada i trzeba się oprzeć na jakimś dłuższym fragmencie, kombinuję, kombinuję ale nic mi z tego nie wychodzi, czy ktoś pomoże?
Kod
<div style="padding: 10px;">
<div>
    <form>
    szukana fraza: <input style="width: 300px;" name="q" value="t"><input value="szukaj" type="submit">
         <input name="c" value="film" checked="on" type="checkbox">tylko tytułu filmu     </form>
        Znaleziono <b>1753</b> pasujących odnośników<br>
    </div>
<div style="margin-bottom: 10px;">
    </div>
<div style="padding-top: 10px;">
        <hr>
</div>
<div class="cl"></div>
<ul style="display: block; width: 700px; margin-left: 15px;" id="searchFixCheck">
                    <li style="padding: 5px;" class="gr5">
pyro
  1. <?php
  2. $preg = preg_match('|<b>([0-9]+?)</b>|', $text, $matches);
  3.  
  4. $found_number = $matches[1];
  5. ?>
XnIcRaM
Po małej przeróbce działa tak jak chciałem, jeszcze muszę przeanalizować dlaczego mi się nie udało, dzięki
  1. <?php
  2. $preg = preg_match('|Znaleziono <b>([0-9]+?)</b>|', $text, $matches);
  3.  
  4. $found_number = $matches[1];
  5. ?>
pyro
Cytat(XnIcRaM @ 19.01.2009, 01:03:51 ) *
Po małej przeróbce działa tak jak chciałem, jeszcze muszę przeanalizować dlaczego mi się nie udało, dzięki
  1. <?php
  2. $preg = preg_match('||Znaleziono ([0-9]+?)||', $text, $matches);
  3.  
  4. $found_number = $matches[1];
  5. ?>

To Ci napewno nie będzie działać smile.gif
XnIcRaM
Cytat(pyro @ 19.01.2009, 12:32:42 ) *
To Ci napewno nie będzie działać smile.gif


e działa, tylko nie wiem czemu tutaj podwójnie wstawiło mi się || smile.gif

To może spróbuję jeszcze raz poprosić o pomoc z preg_match, a mianowicie jak wyciągnąć wszystko co jest w tekście między <a class="searchResultTitle" href=" a ">, kombinowałem tak:
  1. <?php
  2. $preg = preg_match('|searchResultTitle" href="(*)">|', $text, $matches);
  3. ?>
ale to by było zbyt proste smile.gif
magra
  1. <?php
  2. $preg = preg_match('|searchResultTitle" href="([^"]*)">|', $text, $matches);
  3. ?>
XnIcRaM
tak sobie kombinuję i kombinuję, na trzy wyrażenia regularne jakie mam w swoim skrypcie tylko jedno udało mi się zrobić samemu (no w sumie ze sporą pomocą googli), teraz doszedłem że to co powyżej podpowiedział mi kolega magra można zrobić jeszcze na kilka sposobów m.in.

  1. <?php
  2. $preg = preg_match('|searchResultTitle" href="([^"]*)">|', $page, $matches);
  3.    $preg = preg_match('#searchResultTitle" href="([^"]*)">#', $page, $matches);
  4.    $preg = preg_match('#searchResultTitle" href="(.+?)">#', $page, $matches);
  5. ?>


Szukałem gdzieś jakiegoś dobrego opisu wszystkich znaczników, wzorców, modyfikatorów i w ogóle jakiegoś przystępnego opisu PCRE (bo konkretnie to mnie najbardziej interesuje), niestety albo słabo szukam albo nie do końca wiem co mam szukać ale np nie udało mi się znaleźć odpowiedzi choćby na takie (zapewne) proste pytania jak np:
1. jaka jest różnica między użyciem | a # w pierwszych dwóch przykładach, bo na pierwszy rzut oka efekt działania jest ten sam, ale zapewne jakaś różnica
2. nie mam w ogóle pojęcia co oznacza ciąg znaków w nawiasach () w pierwszym i w drugim przykładzie
3. Jeśli się nie mylę to w trzecim przykładzie rozumiem znaczenie uzytych znaków ale tylko pojedynczo jak one działają razem to już nie jestem pewien . oznacza jeden dowolny znak + oznacza że to co przed nim stoi moze wystąpić dowolną ilość razy ale musi być przynajmniej raz natomiast ? oznacza że to co przed nim stoi może pokazać się raz lub w ogóle ale co oznacza .+? nie wiem wychodzi mi na to że oznacza wszystko albo nic czyli że może tam być dowolny ciąg znaków a może również być pusty

W założeniu mam do stworzenia jeszcze kilkanaście wyrażeń nie chciałbym o każde pytać na forum jednak moze znajdzie się ktoś kto będzie potrafił wskazać mi jakieś konkretne materiały na ten temat?
erix
Cytat
Szukałem gdzieś jakiegoś dobrego opisu wszystkich znaczników, wzorców, modyfikatorów i w ogóle jakiegoś przystępnego opisu PCRE (bo konkretnie to mnie najbardziej interesuje), niestety albo słabo szukam albo nie do końca wiem co mam szukać ale np nie udało mi się znaleźć odpowiedzi choćby na takie (zapewne) proste pytania jak np:

http://pl.wikibooks.org/wiki/PHP/Podstawy_...żeń_regularnych
http://www.regular-expressions.info/tutorial.html - wiem, komercyjne, ale nieźle dopracowane.

Cytat
1. jaka jest różnica między użyciem | a # w pierwszych dwóch przykładach, bo na pierwszy rzut oka efekt działania jest ten sam, ale zapewne jakaś różnica

Chodzi o objęcie wyrażenia. Ich użycie wewnątrz wzorca wymaga escape'owania, czyli poprzedzenia backslashem ("\").

Cytat
2. nie mam w ogóle pojęcia co oznacza ciąg znaków w nawiasach () w pierwszym i w drugim przykładzie

Grupowanie wyrażenia - ciąg znaków spełniający kryteria wzorca w nawiasie będzie zwrócony jako szukany.

Cytat
3. Jeśli się nie mylę to w trzecim przykładzie rozumiem znaczenie uzytych znaków ale tylko pojedynczo jak one działają razem to już nie jestem pewien . oznacza jeden dowolny znak + oznacza że to co przed nim stoi moze wystąpić dowolną ilość razy ale musi być przynajmniej raz natomiast ? oznacza że to co przed nim stoi może pokazać się raz lub w ogóle ale co oznacza .+? nie wiem wychodzi mi na to że oznacza wszystko albo nic czyli że może tam być dowolny ciąg znaków a może również być pusty

http://www.regular-expressions.info/reference.html
qraf
Mam podobny problem
Z kodu źródłowego strony http://www.pks.lubin.pl/komunikacja_miedzy...n_ustronie.html
próbuję wydobyć to, co znajduje się pomiędzy <tr> <td>LEGNICA[tu wszystko aż do następnego znacznika </tr>] i wypisać na stronie.

Kod
<?php
$subject = file_get_contents(http://www.pks.lubin.pl/komunikacja_miedzymiastowa_lubin_ustronie.html);
preg_match_all('/<tr><td>LEGNICA(.*)<\/tr>',$subject,$matches)
?>


Zasadniczo problemy widzę dwa:
1. skonstruowanie wyrażenia regularnego;
2. wyprowadzenie wyniku na ekran.

Pomocy! Proszę.
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.