Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Jak wyciągnąć tekst za pomocą preg_match
XnIcRaM
post 18.01.2009, 21:47:41
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 18.01.2009

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


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">
Go to the top of the page
+Quote Post
pyro
post 18.01.2009, 22:05:51
Post #2





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


  1. <?php
  2. $preg = preg_match('|<b>([0-9]+?)</b>|', $text, $matches);
  3.  
  4. $found_number = $matches[1];
  5. ?>


Ten post edytował pyro 18.01.2009, 22:09:05


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
XnIcRaM
post 19.01.2009, 01:03:51
Post #3





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 18.01.2009

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


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


Ten post edytował XnIcRaM 19.01.2009, 15:47:47
Go to the top of the page
+Quote Post
pyro
post 19.01.2009, 12:32:42
Post #4





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


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


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
XnIcRaM
post 19.01.2009, 16:17:22
Post #5





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 18.01.2009

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


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

Ten post edytował XnIcRaM 19.01.2009, 16:20:14
Go to the top of the page
+Quote Post
magra
post 19.01.2009, 16:27:22
Post #6





Grupa: Zarejestrowani
Postów: 34
Pomógł: 8
Dołączył: 5.10.2004

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


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


--------------------
www.internetum.pl
Go to the top of the page
+Quote Post
XnIcRaM
post 19.01.2009, 18:55:35
Post #7





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 18.01.2009

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


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?
Go to the top of the page
+Quote Post
erix
post 19.01.2009, 20:08:17
Post #8





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




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


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

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
qraf
post 1.06.2009, 10:48:46
Post #9





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 1.06.2009

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


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ę.
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: 27.05.2025 - 19:56