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
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
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
Go to the top of the page
+Quote Post
XnIcRaM
post
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
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ć (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
XnIcRaM
post
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ć (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)


e działa, tylko nie wiem czemu tutaj podwójnie wstawiło mi się || (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował XnIcRaM 19.01.2009, 16:20:14
Go to the top of the page
+Quote Post
magra
post
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. ?>
Go to the top of the page
+Quote Post
XnIcRaM
post
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
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
Go to the top of the page
+Quote Post
qraf
post
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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 21:18