Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wyrażenia regularne
Forum PHP.pl > Forum > Przedszkole
Lwik
Witam, siedzę nad tym od 5 min i już totalnie nie mam pomysłu jak to rozwiązać, mianowicie
  1. <?PHP
  2. $string1 = "@Ty"; // Mam 3 stringi, każdy tekst z @ chcę sparsować na link w tym przykładzie będzie to <a href="http://localhost/Ty">@Ty</a>
  3. $string2 = "@";
  4. $string3 = "test @Ty test ";
  5. function change($tekst)
  6. {
  7. $tekst = preg_replace('/\@(.*?)\ /','<a href="http://localhost/\\1">@\\1 </a>',$tekst); // W tym przypadku działa to tak, że string numer 1 jest niewykrywany (brak spacji po zakończeniu)
  8. return $tekst;
  9. }
  10. echo change($string1); //@Ty
  11. echo change($string2); //@ - jest ok
  12. echo change($string3); //<a href="http://localhost/Ty">@Ty </a> - czyli jest ok
jaslanin
po testuj jeszcze ale ja tak to widzę:

  1. <?php
  2. $string1 = "@Ty"; // Mam 3 stringi, każdy tekst z @ chcę sparsować na link w tym przykładzie będzie to <a href="http://localhost/Ty">@Ty</a>
  3. $string2 = "@";
  4. $string3 = "test @Ty test ";
  5. function change($tekst)
  6. {
  7. $tekst = preg_replace('/(\@.+ ?)/','<a href="http://localhost/$1">$1</a>',$tekst); // W tym przypadku działa to tak, że string numer 1 jest niewykrywany (brak spacji po zakończeniu)
  8. return $tekst;
  9. }
  10. echo change($string1).PHP_EOL; //@Ty
  11. echo change($string2).PHP_EOL; //@ - jest ok
  12. echo change($string3).PHP_EOL; //<a href="http://localhost/Ty">@Ty </a> - czyli jest ok


+++ małą poprawkę wprowadziłem
Lwik
? robi mi z całego stringa link.
W przypadku 3 wygląda to tak: <a href="http://localhost/@Ty test ">@Ty test </a>.
Po poprawce identycznie.
jaslanin
  1. <?php
  2. $string1 = "@Ty"; // Mam 3 stringi, każdy tekst z @ chcę sparsować na link w tym przykładzie będzie to <a href="http://localhost/Ty">@Ty</a>
  3. $string2 = "@";
  4. $string3 = "test @Ty test ";
  5. function change($tekst)
  6. {
  7. $tekst = preg_replace('/\@([^ ]+)/','<a href="http://localhost/$1">@$1</a>',$tekst); // W tym przypadku działa to tak, że string numer 1 jest niewykrywany (brak spacji po zakończeniu)
  8. return $tekst;
  9. }
  10. echo change($string1).PHP_EOL; //@Ty
  11. echo change($string2).PHP_EOL; //@ - jest ok
  12. echo change($string3).PHP_EOL; //<a href="http://localhost/Ty">@Ty </a> - czyli jest ok



++++ teraz powinno być lepiej
Lwik
Teoretycznie jest ok, jednak odnośnik wygląda tak:
<a href="http://localhost/@Ty">@Ty</a>
Średnio mam zamiar wrzucać jeszcze jedno regularne by poprawić href. Jakieś pomysły?
jaslanin
poprawiłem wyżej
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.