NAME
Regexp::Common::IRC - provide patterns for parsing IRC messages
SYNOPSIS
sub
trigger {
my
(
$self
,
$msg
) =
@_
;
my
$CMD
=
qr/^summon[:,]?
\s*$RE{IRC}{nick}{-keep}\s*
(?:to\s*$RE{IRC}{channel}{-keep})?
[?.!]*
/
ix;
if
(
$msg
=~
$CMD
) {
$self
->{who} = $1;
$self
->{to} = $2;
return
1;
}
return
0;
}
EBNF for IRC
based upon Section 2.3.1 of RFC 2812 (http://www.irchelp.org/irchelp/rfc/rfc2812.txt)
target = nickname / server
msgtarget = msgto *(
","
msgto )
msgto = channel / ( user [
"%"
host ]
"@"
servername )
msgto =/ ( user
"%"
host ) / targetmask
msgto =/ nickname / ( nickname
"!"
user
"@"
host )
channel = (
"#"
/
"+"
/ (
"!"
channelid ) /
"&"
) chanstring
[
":"
chanstring ]
servername = hostname
host = hostname / hostaddr
hostname = shortname *(
"."
shortname )
shortname = ( letter / digit ) *( letter / digit /
"-"
)
*( letter / digit ); as specified in RFC 1123 [HNAME]
hostaddr = ip4addr / ip6addr
ip4addr = 1*3digit
"."
1*3digit
"."
1*3digit
"."
1*3digit
ip6addr = 1
*hexdigit
7(
":"
1
*hexdigit
) /
"0:0:0:0:0:"
(
"0"
/
"FFFF"
)
":"
ip4addr
nickname = ( letter / special ) *8( letter / digit / special /
"-"
)
targetmask = (
"$"
/
"#"
) mask; see details on allowed masks in section 3.3.1
chanstring =
%x01
-07 /
%x08
-09 /
%x0B
-0C /
%x0E
-1F /
%x21
-2B /
%x2D
-39 /
%x3B
-FF
; any octet except NUL, BELL, CR, LF,
" "
,
","
and
":"
channelid = 5(
%x41
-5A / digit ) ; 5( A-Z / 0-9 )
user = 1*(
%x01
-09 /
%x0B
-0C /
%x0E
-1F /
%x21
-3F /
%x41
-FF )
; any octet except NUL, CR, LF,
" "
and
"@"
key = 1*23(
%x01
-05 /
%x07
-08 /
%x0C
/
%x0E
-1F /
%x21
-7F )
; any 7-bit US_ASCII character,
; except NUL, CR, LF, FF, h/v TABs, and
" "
letter =
%x41
-5A /
%x61
-7A ; A-Z / a-z
digit =
%x30
-39 ; 0-9
hexdigit = digit /
"A"
/
"B"
/
"C"
/
"D"
/
"E"
/
"F"
special =
%x5B
-60 /
%x7B
-7D
;
"["
,
"]"
,
"\", "
`
", "
_
", "
^
", "
{
", "
|
", "
}"
SEE ALSO
Regexp::Common for a general description of how to use this interface.
MAINTAINANCE
This package is maintained by Chris Prather (cpan@prather.org).
COPYRIGHT
Copyright (c) 2005, Chris Prather. All Rights Reserved. This module is free software. It may be used, redistributed and/or modified under the terms of the Perl Artistic License (see http://www.perl.com/perl/misc/Artistic.html)