Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> emoty - usuwanie duplikatów + wyrażenia regularne
zombie
post 2.06.2004, 11:55:32
Post #1





Grupa: Zarejestrowani
Postów: 296
Pomógł: 0
Dołączył: 9.05.2002
Skąd: Warszawa

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


[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 smile.gifsmile.gifsmile.gif pojawiało się smile.gif 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.


--------------------
audaces fortuna iuvat!
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
hwao
post 2.06.2004, 16:05:57
Post #2


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




Ja nie znam sie za dobrze w wyrazeniach wiec napisze pomysl winksmiley.jpg

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
Go to the top of the page
+Quote Post
zombie
post 2.06.2004, 22:12:28
Post #3





Grupa: Zarejestrowani
Postów: 296
Pomógł: 0
Dołączył: 9.05.2002
Skąd: Warszawa

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


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.


--------------------
audaces fortuna iuvat!
Go to the top of the page
+Quote Post
BzikOS
post 3.06.2004, 08:29:51
Post #4





Grupa: Przyjaciele php.pl
Postów: 660
Pomógł: 0
Dołączył: 28.08.2002
Skąd: Starachowice

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


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.
Go to the top of the page
+Quote Post
zombie
post 3.06.2004, 08:45:21
Post #5





Grupa: Zarejestrowani
Postów: 296
Pomógł: 0
Dołączył: 9.05.2002
Skąd: Warszawa

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


Cytat
jakiś text [heee][heee] la la la smile.gifsmile.gifsmile.gif [wesoly][czad][skacze]


... dzieki smile.gif


--------------------
audaces fortuna iuvat!
Go to the top of the page
+Quote Post
BzikOS
post 3.06.2004, 09:15:06
Post #6





Grupa: Przyjaciele php.pl
Postów: 660
Pomógł: 0
Dołączył: 28.08.2002
Skąd: Starachowice

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


[php:1:87de64d7fb]<?php
$str = "jakiś text [heee][heee] la la la smile.gif smile.gif [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ę.
Go to the top of the page
+Quote Post
zombie
post 3.06.2004, 10:38:06
Post #7





Grupa: Zarejestrowani
Postów: 296
Pomógł: 0
Dołączył: 9.05.2002
Skąd: Warszawa

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


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...


--------------------
audaces fortuna iuvat!
Go to the top of the page
+Quote Post
BzikOS
post 3.06.2004, 11:24:08
Post #8





Grupa: Przyjaciele php.pl
Postów: 660
Pomógł: 0
Dołączył: 28.08.2002
Skąd: Starachowice

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


[php:1:12a0ccb35a]<?php
$str = preg_replace( "/([.*?])+[s]{0,}1/s", '1', $str );
?>[/php:1:12a0ccb35a]

Podmień.
Go to the top of the page
+Quote Post
zombie
post 3.06.2004, 12:00:58
Post #9





Grupa: Zarejestrowani
Postów: 296
Pomógł: 0
Dołączył: 9.05.2002
Skąd: Warszawa

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


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]


--------------------
audaces fortuna iuvat!
Go to the top of the page
+Quote Post
BzikOS
post 3.06.2004, 12:41:02
Post #10





Grupa: Przyjaciele php.pl
Postów: 660
Pomógł: 0
Dołączył: 28.08.2002
Skąd: Starachowice

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


[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?
Go to the top of the page
+Quote Post
FiDO
post 3.06.2004, 12:55:18
Post #11





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

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


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]


--------------------
Brak czasu :/
Go to the top of the page
+Quote Post
zombie
post 3.06.2004, 13:39:06
Post #12





Grupa: Zarejestrowani
Postów: 296
Pomógł: 0
Dołączył: 9.05.2002
Skąd: Warszawa

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


ok. dzięki. myślę, że dam już sobie z tym radę smile.gif


--------------------
audaces fortuna iuvat!
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: 14.08.2025 - 01:11