[Perl] problème de regex

Répondre
i M@N
le 27/07/2007 à 22:54
i M@N
Hello.

Je voudrais adapter un script perl pour irssi qui répondrait automatiquement au mot "bonsoir" ou "bonjour" sur un chan.
Mais je voudrais pas qu'il réponde si on dit "rebonsoir" par exemple : en clair je cherche la regex qui ne prendrait en compte le mot "bonsoir" seulement si il est précédé d'un espace ou si il débute une ligne.
Voilà le bout de code :
sub event_privmsg {
my ($server, $data, $nick) =@_;
my ($target, $text) = $data =~ /^(\S*)\s:(.*)/;
if ($target =~ /^# */i) {
if ( $text =~ /.*bonsoir.*|.*bonjour.*|.*hello.*/i) {
$server->command ( "msg $target hello $nick : )" );
}
}
else {
if ( $text =~ /.*bonsoir.*|.*bonjour.*|.*hello.*/i) {
$server->command ( "msg $nick hello $nick : )" );
}
}
}

J'ai eu beau chercher j'ai pas trouvé ... je pense que c'est au niveau de cette ligne :
my ($target, $text) = $data =~ /^(\S*)\s:(.*)/;

Merci d'avance,

@+...
One Love, One Heart, One Unity.
i M@N
le 27/07/2007 à 23:23
i M@N
Reuh ...

Bon /me gros boulet, c'était pas la bonne regex que je bidouillais ... il fallait modifier :
if ( $text =~ /.*bonsoir.*|.*bonjour.*|.*hello.*/i) {

en
if ( $text =~ /bonsoir|bonjour|hello/i) {

Tout simplement.
les .* en regex, c'est n'importe quel caractère, plusieurs fois

Merci Surcouf sur #ubuntu-fr :)

@+...
One Love, One Heart, One Unity.
mojorisin
le 13/08/2007 à 13:31
mojorisin
Voila une solution :
if ( $text =~ /\b(?:bon(?:soir|jour)|hello)\b/i)
echo ’16i[q]sa[ln0=aln100%Pln100/snlbx]sbA0D4D465452snlbxq’|dc
i M@N
le 14/08/2007 à 11:29
i M@N
Hello.

Merci les mecs. smiley

En fait faut surtout que je me penche sur perl pour lui apprendre à compter à ce script : on dit hello il dit hello, on te répond si tu dit hello il redit hello ... c'est sans fin. smiley

@+...
One Love, One Heart, One Unity.
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours