Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]zamiana fragmentów ciagu
mateuszpi
post
Post #1





Grupa: Zarejestrowani
Postów: 140
Pomógł: 0
Dołączył: 11.09.2006
Skąd: Jaworzno

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


Witam mam coś takiego
  1. <?php
  2. $dane="tekst tekst tekst<a href=34524>opis</a> i tutaj znowu sporo tekstu";
  3. ?>

teraz potrzebuje z $dane wykasować fragment o linku czyli: <a href=34524>opis</a>
nie było by problemu gdyby te cyfry były stałe. funkcja str_replace() załatwia sprawe. ale niestety cyfry w tym kodzie mogą się zmieniać i dlatego prosze was o pomoc. chce wkasować wszystko z kodem <a href..(dowolna wartość)../a>
Go to the top of the page
+Quote Post
JoShiMa
post
Post #2





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


Zaprzyjaźnij się z wyrażeniami regularnymi i funkcją preg-replace()


  1. <?php
  2. $nowe_dane = preg_replace('/(<a(.)*>)/','',$dane);
  3. ?>


--------------------
Go to the top of the page
+Quote Post
1010
post
Post #3





Grupa: Zarejestrowani
Postów: 749
Pomógł: 37
Dołączył: 3.10.2006

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


a może po prostu chcesz pozbyć się html?

strip_tags" title="Zobacz w manualu PHP" target="_manual może Ci pomoże...


--------------------
Go to the top of the page
+Quote Post
mateuszpi
post
Post #4





Grupa: Zarejestrowani
Postów: 140
Pomógł: 0
Dołączył: 11.09.2006
Skąd: Jaworzno

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


Cytat
a może po prostu chcesz pozbyć się html?

wręcz przeciwnie chce kasować tylko linki. reszta ma zostać. w reszcie jest kod html biggrin.gif

JoShiMa właśnie takiej odpowiedzi się bałem. czytałem sporo o wyrażeniach regularnych ale za żadne skarby nie moge ich pojąć. do tej pory udawało mi się je omijać ale teraz chyba nie mam jak.

twój kod który podałeś faktycznie znajduje i usuwa całe polecenia <a href jednak znika również to co jest za nimi. czyli z przykładu
$dane="tekst pierwszy <a href=fsdfsdfd>fsdfs</a> tekst drugi <a href=dadasd>fdsaffd</a> tekst trzeci";

pozostaje mi tylko "tekst pierwszy" a chciałbym tekst drugi i trzeci też zobaczyć biggrin.gif
Moge prosić o dokładny kod bo raczej sam tych wyrażej nie rozgryze.
Go to the top of the page
+Quote Post
elemek
post
Post #5





Grupa: Zarejestrowani
Postów: 71
Pomógł: 24
Dołączył: 14.08.2008

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


  1. <?php
  2. $dane="tekst pierwszy <a href=fsdfsdfd>fsdfs</a> tekst drugi <a href=dadasd>fdsaffd</a> tekst trzeci";
  3. echo preg_replace('#<as+.*?</a>#i', '', $dane);
  4. ?>


--------------------
Rzecz trudną rozbijam na kilka łatwiejszych :)
Pomogłem? Kliknij Pomógł.
Go to the top of the page
+Quote Post
mateuszpi
post
Post #6





Grupa: Zarejestrowani
Postów: 140
Pomógł: 0
Dołączył: 11.09.2006
Skąd: Jaworzno

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


i oto chodziło. kilka znaczków i po problemie a ja kurka dzień nad wyrażeniami strawiłem. dzięki panowie. macie po plusiku, w porywach stawiam piwko jeśli jesteście z okolic jaworzna
Go to the top of the page
+Quote Post
JoShiMa
post
Post #7





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


Cytat(mateuszpi @ 9.09.2008, 20:25:33 ) *
JoShiMa właśnie takiej odpowiedzi się bałem. czytałem sporo o wyrażeniach regularnych ale za żadne skarby nie moge ich pojąć. do tej pory udawało mi się je omijać ale teraz chyba nie mam jak.

To błąd trzeba ćwiczyć, ćwiczyć i jeszcze raz ćwiczyć smile.gif Wyrażenia regularne wiele rzeczy upraszczają. A jak chcesz się ich pouczyć to się zainteresuj książkami do PERLa.

Aha i masz tu link do testera wyrażeń regularnych. Bardzo przydatne narzędzie jak się ćwiczy.


Cytat(mateuszpi @ 9.09.2008, 20:25:33 ) *
twój kod który podałeś faktycznie znajduje i usuwa całe polecenia <a href jednak znika również to co jest za nimi. czyli z przykładu
$dane="tekst pierwszy <a href=fsdfsdfd>fsdfs</a> tekst drugi <a href=dadasd>fdsaffd</a> tekst trzeci";
pozostaje mi tylko "tekst pierwszy" a chciałbym tekst drugi i trzeci też zobaczyć biggrin.gif
Moge prosić o dokładny kod bo raczej sam tych wyrażej nie rozgryze.

Aha... Tego, że masz tam w tekście więcej niż jeden link to nie powiedziałeś. Tak naprawdę powinien zostać tekst pierwszy i tekst trzeci. Zaraz coś pokombinuję.

Aaaa. Już masz smile.gif


mateuszpi nudzi mi się to Ci wyjaśnię różnicę w moim wyrażeniu regularnym i w rozwiązaniu elemka.

Zaproponowane przez niego
  1. <?php
  2. preg_replace('#<as+.*?</a>#i', '', $dane);
  3. ?>


Mozna zapisac również w następujący sposób:
  1. <?php
  2. preg_replace('/<a.*?/a>/', '', $dane);
  3. ?>


Możesz sprawdzić, że zadziałają tak samo a to już jest bardzo podobne to tego co ja Ci zaproponowałam:
  1. <?php
  2. preg_replace('/(<a(.)*>)/','',$dane);
  3. ?>


Zasadnicza różnica tkwi w tym, że u elemka jest *? a u mnie *

* oznacza dopasowanie 0 lub więcej razy i jest kwantyfikatorem maksymalistycznym
*? też oznacza dopasowanie 0 lub więcej razy ale jest kwantyfikatorem minimalistycznym

Dlatego użycie * dopasuje ciąg od pierwszego <a do ostatniego /a> bo stara się dopasować jak najdłuższy ciąg znaków pasujący do wzorca, natopmiast użycie *? dopasuje najkrótsze możliwe ciągi między <a i /a> i w przypadku gdy w tekście masz kilka odnośników powycina ci je zgodnie z Twoimi oczekiwaniami.

Ten post edytował JoShiMa 10.09.2008, 13:03:23


--------------------
Go to the top of the page
+Quote Post
mateuszpi
post
Post #8





Grupa: Zarejestrowani
Postów: 140
Pomógł: 0
Dołączył: 11.09.2006
Skąd: Jaworzno

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


ok. dzięki za wyjaśnienia. posiedze nad nimi bo chyba faktycznie może się wiedza przydać.
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 Aktualny czas: 22.08.2025 - 01:45