zombie
2.06.2004, 11:55:32
[php:1:4eb40e2aba]<?php
function wstawemota($linia){
preg_match_all ("|[.*?]|", $linia, $emt);
$emt[0] = array_unique($emt[0]);
foreach($emt[0] AS $key => $val){
$emot = (ereg_replace("]|[","",$val));
if (file_exists("emots/".$emot.".gif"))
{
$linia = str_replace($val, "<img src="emots/".$emot.".gif" title="".$emot."">", $linia);
}
}
return $linia;
}
?>[/php:1:4eb40e2aba]
... w skrótcie tak wygląda funkcja odpowiadająca za emoty. Problem polega na tym, że chcę wykluczyć duplikaty, tj. żeby zamiast



pojawiało się

Poza tym nie najpewniej czuję się w wyrażeniach regularnych, więc jeśli można to zrobic prościej, będę wdzięczny za wskazówki.
Z góry dzięki za pomoc.
Ja nie znam sie za dobrze w wyrazeniach wiec napisze pomysl
Trzeba by zrobic wyrazenie ktore sprawdza czy po usmieszku nie wystepuej znaki typu spacja(lub bez spacji i odrazu) : ; bo od nich zaczyna sie wiekszosc emontkow i tamtej resty nie zamienial tylko ten 1
zombie
2.06.2004, 22:12:28
hmm... właściwie kilka emotków może następować po sobie. bardziej chodzi o to, żeby kilka tych samych nie powtarzało się po kolei.
BzikOS
3.06.2004, 08:29:51
Możesz rzucić przykładowym stringiem zawierającym emoty, w tym kilka tych samych następujących po sobie i kilka różnych następujących po sobie. Pokombinuję w wolnym czasie.
zombie
3.06.2004, 08:45:21
Cytat
jakiś text [heee][heee] la la la



[wesoly][czad][skacze]
... dzieki
BzikOS
3.06.2004, 09:15:06
[php:1:87de64d7fb]<?php
$str = "jakiś text [heee][heee] la la la

[wesoly][czad][skacze]";
$str = preg_replace( "/([.*?])+1/s", '1', $str );
$str = preg_replace_callback( "/[(.*?)]/s", 'repl', $str );
print($str);
function repl($match)
{
if( file_exists( "emots/" . $match[1] . ".gif") )
{
return( "<img src="emots/" . $match[1] . ".gif" title="" . $match[1] . "">" );
}
else
{
return False;
}
}
?>[/php:1:87de64d7fb]
Niestety w 2 pregach :/
Da się zrobić na jednym, ale narazie tyle wykombinowałem, jeżeli Ci to odpowiada to spox, a jeśli nie to mów, będe kombinował dalej ale później, bo narazie w robocie siedzę.
zombie
3.06.2004, 10:38:06
dzięki BzikOS... chyba trzeb pokombinować w innym kierunku... sam nie wiem... Twój kod jest ok, ale przestaje spełniać zadanie, kiedy string wygląda np. tak:
Cytat
jakiś text [heee] [heee] la la la [wesoly][czad][skacze]
Czyli następujące po sobie emoty są oddzielone spacją... Może założyć, w preg_replace, że między nimi może wystąpić pojedynczy znak...
BzikOS
3.06.2004, 11:24:08
[php:1:12a0ccb35a]<?php
$str = preg_replace( "/([.*?])+[s]{0,}1/s", '1', $str );
?>[/php:1:12a0ccb35a]
Podmień.
zombie
3.06.2004, 12:00:58
Dzięki serdeczne! Muszę się poważnie zabrać za wyr. nieregularne, coś mi się zdaje. :)
P.S.: Czy wiesz może jak do składni preg_replace wprowadzić zmienne? To samo co z tymi emotami chcę zrobić z ':)' <- dane o nich mam w array()
[php:1:b1122a65b6]<?php
$emotsARRAY = array(";(","cry",":D","lol",":(","sad",":o(","sad",":-(","sad",":-)","smile",":o)","smile",":)","smile",":|","wrong","=)","smile3",":p","tongue",";p","tongue",":P","tongue",";)","wink");
?>[/php:1:b1122a65b6]
BzikOS
3.06.2004, 12:41:02
[php:1:46b323d327]<?php
foreach( $emotsARRAY as $aVal )
{
$aVal = str_replace( Array('(', ')', '|'), Array('(', ')', '|'), $aVal );
$str = preg_replace( "/($aVal)+s?1{1,}/s", '1', $str );
}
?>[/php:1:46b323d327]
Coś takiego?
Lepiej uzyc preg_quote:
[php:1:24c9cf3423]<?php
foreach( $emotsARRAY as $aVal )
{
$aVal = preg_quote($aVal, "/");
$str = preg_replace( "/($aVal)+s?1{1,}/s", '1', $str );
}
?>[/php:1:24c9cf3423]
zombie
3.06.2004, 13:39:06
ok. dzięki. myślę, że dam już sobie z tym radę
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.