The filter tries to find the "match" string then use the "From" and "To" as a substitution. You could do both operations simply with the substation this allows finer control on which strings you do the substitution. The match, from, and to are all perl regex expressions. Rules are evaluated in descending order. The top rule is first evaluated, then the second from the top, etc. All strings are evaluated as:
$<name> is expanded to the environment variable <name>. This is done immediately when you insert the rule, and will not change after that time. Therefor it's probably of limited value.
$$<name> is substituted with the perl $<name> variable during the match. This can be substrings such as $1, $2 in the substitution, or normal variables available under sirc (such as $nick, $channel, etc).
~<name>~ PREPENDED ONCE AND ONLY ONCE to the line will send the line of text to the window called <name>. If the window does not exist it will go to the last window which had focus. There are several special windows, all prefixed by a single "!":
Pretty straight forward, match anything, then substitute boren with BoreN.
Looks for "boren" if found, substitutes the beginning of the string (^) with ~boren~.
Ok, the from line is a little bit more complicated. It says match 0 or 1 copies of "~\S+~". Which is 1 tilde, one or more none whitespaces, and then another tilde. The paranoid might do (*:~\S+~) which says match 0 or more channel directives in case prior rules are broken.
*** Notice -- Received KILL message for BOBO!ANDY@line82-basel.datacomm.ch from NickServ Path: empire.ny.us.dal.net[209.51.168.14]!trapdoor.ca.us.dal .net[206.86.127.252]!caris.ca.us.dal.net[208.1.222.221]!services.dal.net[2 08.1.222.222]!services.dal.net (NickServ Enforcement)When you're +s you get a tons of them, you don't want all of them flying across your screen. I'm going to make 3 rules to deal with them one bit at a time. You could do it in less rules, but it'll show you the basic rule structure, in nice steps, and how to use multiple rules to parse a message. The first step is to remove the Path: portion of the message, and will be example 4.
Match: ^\*\*\*.* KILL message for.*
From: Path: \S+
To: .
Match looks for the message starting with ***, the *'s have to be quoted with \ since by themselves they mean 0 or more of the prior character. .* the means match anything until you find " KILL message for". This allows us to avoid tying in "-- Reicevied..." etc. The trailing .* says match anything to the end of the line. (not needed I think)
The From like says substitute space Path: space and any non whitespace characters with the To. To is a "." therefor the entire path turns into a single period.
The message now looks like:
*** Notice -- Received KILL message for BOBO!ANDY@line82-basel.datacomm.ch from NickServ. (NickServ Enforcement)Notice the new "." after NickServ?
Match rule searches for the KILL message and makes sure it's from NickServ. Notice the \( and \) both () and used in regex, therefor we have to quote them. This is very similar to example 3.
*** [KILL] <KILLER> killed <KILLED> (reason)Match: \*\*\*.*KILL message
Ok, the match looks for ***<something> KILL message. We can't use ^ since we may have just appended ~<window>~.
The from line get's little more interesting. The "for (.*?) " looks for the word for then some text. .*? says match zero or more of anything except newline, but isn't greedy. Stop when the first terminating condition is found, not the last. In other words it matches anything until a space. The surrounding () says to save the contents. Each () saves the matched data in $# where # starts at 1 for the first substring, etc. In this case, $1 gets the nick/user-info of the person killed. $2 is then filled with the name of the killer. Between the () we have the reason for the kill. Here the ( and \( get a little confusing. Remember \( matchin the actual character '('.
Takes the nick and adds colour #4 between the two <> ~c clears the colour.