Leser: 1
![]() |
|< 1 2 3 >| | ![]() |
23 Einträge, 3 Seiten |
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);
1
2
3
4
5
6
7
8
9
10
11
12
13
$VAR1 = [
'Dies',
[
';-)'
],
' ist ein Test ',
[
':-)'
],
';
a ',
':- b'
];
1
2
3
4
5
$mw->Laben(
-text => "Und jetzt kommt ein Bild:
-image => $file,
-text => "und wieder text"
);
![]() |
|< 1 2 3 >| | ![]() |
23 Einträge, 3 Seiten |