Dmitrii Manin asked, | I need help with a standard recipe from rc.request. The recipe | reads as follows: | | * -100^0 B ?? ^^([ ]|$)*\ | ((((archives?:?($|[ ]+)|\ | ((send|get)(me)?|gimme|retrieve|mail|ls|dir(ectory)?|\ | list|show|search|[fe]?grep|find|maxfiles|version|help|info)\ | ([ ].*)?$)([ ]|$)*)+\ | ([^ a-z].*$(.*$(.*$(.*$(.*$)?)?)?)?)?^^|\ | (help|info)[ ]*$|\ | (add|join|leave|sign( [^ ]+ |-)?o(n|ff)|(un|de)?-?sub)\>)|\ | ([^ a-z].*$(.*$(.*$(.*$(.*$)?)?)?)?)?^^|\ | .*( (join|leave|add .* to|(delete|remove) .* from|\ | (take|sign|get) .* off|(put|sign) .* on) .* [a-z-]*list|\ | (un-?|sub?)scri(be|ption))\>|\ | ^^) That's not a recipe; it's one condition of a recipe. | I have two questions: | | 1. What does the initial portion mean: "-100^0"? That is all explained in the procmailsc(5) man page. It's a point value: if the message's body [because of the "B ??" part -- but that's explained in the procmailrc(5) man page rather than in procmailsc(5)] has one or more matches to that regexp, take off 100 points. | 2. What is the purpose of this portion: "$(.*$(.*$(.*$(.*$)?)?)?)?)?"? It means the end of a line of text, plus zero to four more lines of text before the next element in the regexp (which is ^^, an anchor to the end of the search area). In other words, the earlier part of the regexp must be matched within five lines of the bottom; i.e., it should be the last thing in the body, but we'll allow a little bit more text after it in case the sender's mailer is configured to add a signature.