Thread In Text Smilies durch Bilder ersetzen (22 answers)
Opened by Froschpopo at 2005-04-12 01:17

pKai
 2005-04-12 16:25
#43469 #43469
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
[quote=Froschpopo,12.April.2005, 11:51]ich bräuchte irgendwie sowas wie split(/exists($emotions{(.*)})/,$txt);... sowas in der art..[/quote]
Interessant das "zu Fuß" zu machen.
Falls es jemand gebrauchen kann:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
use strict;
use warnings;
use Data::Dumper;

my %hash = (':-)' => 'lachen.gif', ';-)' => 'zwinker.gif');
my $string = "Dies;-) ist ein Test :-);\na :- b";

my $smile1;
{ # Zeichen sammeln, mit denen Smilies beginnen können
my %sc = map {$_, 1} map {substr($_, 0, 1)} keys %hash;
$smile1 = join ('', map {quotemeta} sort keys %sc);
}
# smilies (regexp-safe) in alphabetisch absteigender Reihenfolge (get longest match)
my @smiler = map {quotemeta} sort {-($a cmp $b)} keys %hash;

my @splitted;
push (@splitted, $1) if $string =~ /\G([^$smile1]+)/ogc; # bis zum ersten (möglichen) Smilie-Start
LOOP: {
foreach my $s (@smiler) {
push (@splitted, [$1]), redo LOOP if $string =~ /\G($s)/gc; # eins gefunden -> redo LOOP
}
push (@splitted, $1), redo LOOP if $string =~ /\G(.[^$smile1]*)/ogc; # ein Zeichen und dann bis nächstem möglichen Start
}

print Dumper(\@splitted);

Habe hier die Smilies, zwecks leichterer Wiedererkennbarkeit in ARRAY-refs gepackt.
Ausgabe des Test-Skripts:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
$VAR1 = [
'Dies',
[
';-)'
],
' ist ein Test ',
[
':-)'
],
';
a ',
':- b'
];
I sense a soul in search of answers.

View full thread In Text Smilies durch Bilder ersetzen