Schrift
[thread]12459[/thread]

String aufteilen und bestimmte Teile auslesen

Leser: 2


<< >> 5 Einträge, 1 Seite
Gast Gast
 2008-09-09 02:18
#114393 #114393
Guten morgen ,
Ich habe gerade ein sehr blödes Problem.
Und zwar raffe ich den teil mit der Regex etc. nochnicht wirklich und deshalb habe ich auch Probleme jetzt.

Undzwar habe ich diesen String hier:

:Monk!Monk@127.0.0.1 PRIVMSG #test :Beispiel TEXT

so, und nun brauche ich einmal den Namen, der am anfang zwischendem : und dem ! steht und dann den Beispiel Text nach dem zweiten :

In diesem Fall soll dann jeweils in einer Variable "Monk" & in der anderen "Beispiel TEXT" stehen.

Wie bekomme ich das hin ?

Ein entfernter Freund hat mir für den ersten Teil folgenden Code gegeben:

Code: (dl )
1
2
3
4
5
6
7
8
9
$input = ':Monk!Monk@127.0.0.1 PRIVMSG #test :Beispiel TEXT';
if($input =~ /^@\w+:/) {
push(@string,"$&\n");
}

for $string (@string) {
$string =~ tr/:!/<>/d;
print @string;
}


Funktioniert auch, aber ich bekomme halt nur eine Sache ausgelesen damit.
Kann mir vielleicht jemand genauer erklären was der Source macht und wie ich das andere ausgelesen bekomme ?

Mit freundlichem Gruß

Monk
Gast Gast
 2008-09-09 05:19
#114394 #114394
Der Code deines Freundes ist sehr umständlich.
So geht es sehr viel einfacher:
Code: (dl )
1
2
3
4
5
my $input = ':Monk!Monk@127.0.0.1 PRIVMSG #test :Beispiel TEXT';
my ($name, $text) = ('', '');
if( $input=~/^:(\w+)!.+?:(.+)$/i )
{ ($name, $text) = ($1, $2); }
print "Name: $name\nText: $text\n";
Gast Gast
 2008-09-09 06:21
#114395 #114395
vielen vielen Dank, es funktioniert :)

MFG
MatthiasW
 2008-09-09 17:29
#114424 #114424
User since
2008-01-27
367 Artikel
BenutzerIn
[default_avatar]
@#2, wieso weist du $name und $text nicht direkt zu?
Code (perl): (dl )
my( $name, $text ) = $input =~ /^:(\w+)!.+?:(.+)$/;

MfG
perl -E'*==*",s;;%ENV=~m,..$,,$&+42;e,$==f;$"++for+ab..an;@"=qw,u t,,print+chr;sub f{split}say"@{=} me"'
Linuxer
 2008-09-09 18:43
#114428 #114428
User since
2006-01-27
3891 Artikel
HausmeisterIn

user image
Hi,

wenn das Format so fest ist, dann könnte auch das hier gehen:

Code (perl): (dl )
my ( $name, $text ) = ( split /[:!]/, $input, 4 )[1,-1];



meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
<< >> 5 Einträge, 1 Seite



View all threads created 2008-09-09 02:18.