LubieWino
9.12.2007, 18:47:31
Mam takie chyba dość proste pytanko. zamiana ciągów znaków odbywa się przez:
str_replace ('wyraz_do_zmiany', 'wyraz_zmieniony', 'cały_text'),
czy możecie mi napisać wyrażenie które zamienia wyrazy zawierający jakiś podciąg na jakiś określony wyraz? czyli np:
chciałbym zamienić każdy z wyrazów , który zawiera w sobie podciąg 'oza', na wyraz 'domek'.
jakie powinienem wpisać wyrażenie do funkcji str_replace w pierwszej rubryce?
b_chmura
9.12.2007, 19:13:33
co to są podciągi? :D
<?php
$pattern = "#S*ozaS*#"; // pasuje do każdego wyrazu zawierajacego "oza"
$text = "mala koza w kropki bordo nazywa się Soza z filmu Scareface Loozaaa Booooza!!"; // przykladowy tekst
echo $text."<br />".$new_text; ?>
LubieWino
9.12.2007, 20:20:16
ok super dzięki !
ALE ! jest jeszcze mały problem. nie chce zeby funkcja uwzględniała wielkości liter.
a narazie jest tak, że jak napisze w texcie 'koza nazywa sie ZOZA'.
to mi tylko zamienia podciag 'oza' w wyrazie 'koza', natomiast wyraz 'ZOZA' pozostaje niezmieniony.
można to jakoś rozwiązać?
b_chmura
9.12.2007, 20:24:15
<?php
$pattern = "#S*(oza)|(OZA)S*#";
?>
LubieWino
9.12.2007, 21:43:00
O dżizys.... panowie, skupiłem sie na wilkościach liter.. a przecież w ogóle .. od początku nie tak !
NIE chodzi mi o to, że jeśli mam wyraz 'ZOZOL' to funkcja wynajduje mi podciąg 'OZO' i zamienia ten podciąg na 'domek', tak że w ostateczności jest: 'ZdomekL'
chce aby funkcja zamieniała CAŁY wyraz, a nie tylko podciąg w wyrazie, czyli w tym przypadku efekt ostateczny powinien być po prostu 'domek' ! bez początkowej litery 'Z' i końcowej 'L' .
poóżcie prosze
b_chmura
9.12.2007, 21:53:34
hmmm a to jak na moją głowę już większa sztuka
pierwsze co mi przyszło na myśl to każde słowo przypisać do tablicy, sprawdzać czy występuje w nim w/w ciąg znaków
jeśli tak zamienić je na "domek"
marcio
9.12.2007, 21:55:02
Chodzi o to:
<?php
$ciag = 'bla bla bla';
echo($ciag.'|'.$nowy_ciag); ?>
0ps sorki chyba zle zrozumialem myslalem ze to chcialo
Cytat
chce aby funkcja zamieniała CAŁY wyraz, a nie tylko podciąg w wyrazie, czyli w tym przypadku efekt ostateczny powinien być po prostu 'domek' ! bez początkowej litery 'Z' i końcowej 'L' .
powiedziec ze dany wyraz chce zastapic na inny
LubieWino
9.12.2007, 22:10:16
nie marcio, to jest dokladnie to samo co poprzedni kod.
jak dasz $ciąg = 'bla blada grobla';
to efekt końcowy będzie 'domek domekda grodomek';
a chce w tym wypadku efekt 'domek domek domek'
marcio
9.12.2007, 22:17:38
no i wlasnie taki efekt jest

P.S czekaj znowu zle przeczytalem chodzi ci o to ze obojetnie co bedzie w ciag to kazdy jego wyraz ma zmienic na domek?
b_chmura
9.12.2007, 22:18:29
EDYTOWANE
zamienione na funkcje i testowane
<?php
function zmien($co, $naco, $wczym)
{
foreach($wyrazy as $wyraz)
{
{
$out .= $naco.' ';
}
else
{
$out .= $wyraz.' ';
}
}
return $out;
}
$zmieniona_tresc = zmien('bla', 'Domek', 'bla blada grobla');
?>
kod, który Ci podałem w poprzdnim poście działa tak jak chcesz! Jedyne co musisz dodać to :
$text = strtolower($text);
b_chmura
9.12.2007, 22:42:15
Cytat(marcio @ 9.12.2007, 22:17:38 )

no i wlasnie taki efekt jest

P.S czekaj znowu zle przeczytalem chodzi ci o to ze obojetnie co bedzie w ciag to kazdy jego wyraz ma zmienic na domek?
Cytat(ayeo @ 9.12.2007, 22:32:05 )

kod, który Ci podałem w poprzdnim poście działa tak jak chcesz! Jedyne co musisz dodać to :
$text = strtolower($text);
Zanim zaczniecie odpowiadać przeczytajcie w czym tkwi problem, nie rozumiem waszego działania...
~LubieWino funkcja którą Ci podałem spełnia sie w 100% jednak istnieje może jakieś inne optymalniejsze rozwiązanie, nie wiem, musisz poczekać aż jakiś specjalista sie odezwie
LubieWino
9.12.2007, 22:50:18
ayeo - główna sprawa jest taka, że ten kod nie działa jak powinien, bo on nie zamienia mi całych wyrazów a jedynie podciąg wyrazów. odnasząc się do twojego przykładu, efekt końcowy zdania które podałeś jest:
'mala kdomek w kropki bordo nazywa się Sdomek z filmu Scareface Lodomekaa Booodomek!!"
a ma być:
'mala domek w kropki bordo nazywa się domek z filmu Scareface domek domek!!"
chmura.... huh ... zadziałeś teraz... musze chwile to przetestować i napisze co i jak
Pierwszy kod właśnie tak działa!! Jeżeli zmieniłeś później $pattern; to już nie moja wina! Sprawdź to proszę!
@b_chmura to chyba Ty podałeś zły $pattern

Co do kodu, który podałeś potem to wydaje się być spoko.
Pozdrawiam!
EDIT Forum usunęło backslashe sprzed "S" w $pattern

dlatego może nie działało
LubieWino
9.12.2007, 23:07:17
hehe , ok działa:)
podejrzwałem że coś nie tak z tym zapytaniem, ale jeszcze sie z tym nie obeznałem dokładnie. dobrze ze udalo ci sie to znaleźć.
tak czy siak dzieki tobie i dzieki wszystkim !
b_chmura
9.12.2007, 23:10:01
~ayeo zwracam honor, faktycznie po dodaniu backslashy działa jak należy
Pozdrawiam
Chmura
PS: a to głupie forum :P :D
---
Ja Ci dam glupie :P :D /~strife/
LubieWino
9.12.2007, 23:13:40
ale czy na pewno te backslashe usunęło forum? czy to nieuwaga ayeo?
a może specjalnie to zrobił zebyśmy mieli horror (przynajmniej ja) ;>
ayeo
10.12.2007, 04:07:38
forum, bo z kodu b_chmura też usunęło

chociaż na początku chyba jeszcze były...
franki01
10.12.2007, 18:28:14
Najprostsza rzecz a ludzie sie mecza

<?php
$tekst = 'abccostam lolcosstamsabc costamlolabc';
$cozamienic = 'costam';
$naco = 'domek';
$litery = 'ęóąśłżźćńĘÓĄŚŁŻŹĆŃa-zA-Z';
$tekst = ' '.$tekst.' ';
$tekst = preg_replace("(([^{$litery}])(?:[{$litery}]*?)".preg_quote($cozamienic)."(?:[{$litery}]*?)([^{$litery}]))is", '$1'.$naco.'$2', $tekst); $tekst = preg_replace("(([^{$litery}])(?:[{$litery}]*?)".preg_quote($cozamienic)."(?:[{$litery}]*?)([^{$litery}]))is", '$1'.$naco.'$2', $tekst); $tekst = substr($tekst, 1
, -1
); ?>
Sprawdzone i dziala. Dwa razy jest to samo preg_match, bo jak wyrazy sa kolo siebie to zamienia co drugi.
b_chmura
10.12.2007, 18:51:32
z tego co zauważyłem rozwiązanie ayeo spełnia się. Więc po co to dziwne coś u góry:D
franki01
10.12.2007, 19:00:14
A dlaczego dziwne?

Tamto rozwiazanie nie wiem czy dziala bo nie sprawdzalem. Opieralem sie na tym ze ktos pisal ze nie dziala. Rozwiazaniu @ayeo brakuje chyba modifikatora i, ktory nie bedzie zwracal uwagi na wielkosc liter.
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.