[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:
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:
$VAR1 = [
'Dies',
[
';-)'
],
' ist ein Test ',
[
':-)'
],
';
a ',
':- b'
];
I sense a soul in search of answers.