Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Podmiana frazy przez preg_replace() z pominięciem
caroon
post 16.01.2009, 23:06:25
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 16.01.2009

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


Witam,
za pomocą wyrażeń regularnych i funkcji preg_replace(), muszę dokonać podmiany frazy A w zmiennej tekstowej, nie podmieniając tej samej frazy A występującej pomiędzy dwoma różnymi znacznikami.

Przykład - słowo 'dlugi' trzeba zamienić na 'krotki' nie zamieniając słowa pomiędzy znacznikami 11 i 22. Dodatkowa trudnoscią jest fakt, że w rzeczywistości, pomiędzy znacznikami może znaleźć się wszystko, z kodem w php, perlu itp. włącznie.

$string1 = "To jest jakis dlugi 11 dlugi 22 tekst";
$string2 = preg_replace('//', '', $string1);


Jak zapisać wyrażenie regularne dla $string2 w preg_replace() ? Może coś

Będę wdzięczny za wskazówki

Ten post edytował caroon 16.01.2009, 23:24:36
Go to the top of the page
+Quote Post
qba_rox
post 17.01.2009, 01:17:13
Post #2





Grupa: Zarejestrowani
Postów: 29
Pomógł: 1
Dołączył: 12.01.2009
Skąd: Warszawa

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


  1. <?php
  2. $s1 = "To jest jakis dlugi 11 dlugi 22 tekst";
  3. $s2 = preg_replace('|(.*)dlugi(.*)(11.*22.*)|', '${1}krotki${2}${3}', $s1);
  4. ?>


przerabne, bo to dziala tylko jesli masz jedno wystapienie 'dlugi' przed 11. jak chcesz to obejsc, to zrob petle ktora trwa do momentu az przedostatnia zamiana rowna sie ostatniej zamianie (czyli nic nie zmienilismy). jest to nie wydajne na maksa, ale jest pozno wiec tylko to mi przyszlo do glowy smile.gif


--------------------
Kodzimy!!!
Go to the top of the page
+Quote Post
grubyx
post 17.01.2009, 02:09:56
Post #3





Grupa: Zarejestrowani
Postów: 34
Pomógł: 1
Dołączył: 5.10.2006

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


Witaj, zrobiłem to bez uzycia funkcji preg_replace, ale nie wiem czy o takie coś dokładnie Tobie chodzi i czy moja wersja się w tym sprawdzi, oto kod:
  1. <?
  2. $string1 = "To jest jakis dlugi 11 dlugi 22 tekst";
  3.  
  4. $s = '11 dlugi 22';
  5. $r = '!@@@!';
  6.  
  7. $string2 = str_replace($s, $r, $string1);
  8.  
  9. $s3 = str_replace('dlugi', 'krotki', $string2);
  10.  
  11. echo str_replace($r, $s, $s3);
  12.  
  13. ?>

Po prostu zamienia '11 dlugi 22' na ciąg znaków '!@@@!' i potem wszystkie wystąpienia słowa 'dlugi' na 'krotki' i w efekcie zwraca poprawny string. Tylko, gdy w tekście znajdzie się coś o wartości takiej samej jak string $r to zostanie to zamienione na słowo 'długi'. Jeśli będziesz miał pewność, że taki ciąg znaków nie wystąpi powinno działać, jeśli nie to możesz najpierw z całego tekstu usunąć ciąg '!@@@!' (bo w sumie nietypowy i brzydko wyglądający na stronie) albo zamienić go np na '!!!!!', pokombinuj smile.gif.
Pozdrawiam.
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: 7.07.2025 - 19:48