| Class | Regexp |
| In: |
lib/rbot/irc.rb
lib/rbot/core/utils/extends.rb lib/rbot/messagemapper.rb |
| Parent: | Object |
First of all we add a method to the Regexp class
| DIGITS | = | /\d+/ | We start with some general-purpose ones which will be used in the Irc module too, but are useful regardless | |
| HEX_DIGIT | = | /[0-9A-Fa-f]/ | ||
| HEX_DIGITS | = | /#{HEX_DIGIT}+/ | ||
| HEX_OCTET | = | /#{HEX_DIGIT}#{HEX_DIGIT}?/ | ||
| DEC_OCTET | = | /[01]?\d?\d|2[0-4]\d|25[0-5]/ | ||
| DEC_IP_ADDR | = | /#{DEC_OCTET}\.#{DEC_OCTET}\.#{DEC_OCTET}\.#{DEC_OCTET}/ | ||
| HEX_IP_ADDR | = | /#{HEX_OCTET}\.#{HEX_OCTET}\.#{HEX_OCTET}\.#{HEX_OCTET}/ | ||
| IP_ADDR | = | /#{DEC_IP_ADDR}|#{HEX_IP_ADDR}/ | ||
| HEX_16BIT | = | /#{HEX_DIGIT}{1,4}/ | IPv6, from Resolv::IPv6, without the \A..\z anchors | |
| IP6_8Hex | = | /(?:#{HEX_16BIT}:){7}#{HEX_16BIT}/ | ||
| IP6_CompressedHex | = | /((?:#{HEX_16BIT}(?::#{HEX_16BIT})*)?)::((?:#{HEX_16BIT}(?::#{HEX_16BIT})*)?)/ | ||
| IP6_6Hex4Dec | = | /((?:#{HEX_16BIT}:){6,6})#{DEC_IP_ADDR}/ | ||
| IP6_CompressedHex4Dec | = | /((?:#{HEX_16BIT}(?::#{HEX_16BIT})*)?)::((?:#{HEX_16BIT}:)*)#{DEC_IP_ADDR}/ | ||
| IP6_ADDR | = | /(?:#{IP6_8Hex})|(?:#{IP6_CompressedHex})|(?:#{IP6_6Hex4Dec})|(?:#{IP6_CompressedHex4Dec})/ | ||
| IN_ON | = | /in|on/ |
A method to build a regexp that matches a list of something separated by optional commas and/or the word "and", an optionally repeated prefix, and whitespace.
# File lib/rbot/core/utils/extends.rb, line 373
373: def Regexp.new_list(reg, pfx = "")
374: if pfx.kind_of?(String) and pfx.empty?
375: return %r(#{reg}(?:,?(?:\s+and)?\s+#{reg})*)
376: else
377: return %r(#{reg}(?:,?(?:\s+and)?(?:\s+#{pfx})?\s+#{reg})*)
378: end
379: end
The MessageMapper cleanup method: does both remove_capture and remove_head_tail
# File lib/rbot/messagemapper.rb, line 27
27: def mm_cleanup
28: new = self.source.gsub(/(^|[^\\])((?:\\\\)*)\(([^?])/) {
29: "%s%s(?:%s" % [$1, $2, $3]
30: }.sub(/^\^/,'').sub(/\$$/,'')
31: Regexp.new(new, self.options)
32: end
We may want to remove captures
# File lib/rbot/messagemapper.rb, line 12
12: def remove_captures
13: new = self.source.gsub(/(^|[^\\])((?:\\\\)*)\(([^?])/) {
14: "%s%s(?:%s" % [$1, $2, $3]
15: }
16: Regexp.new(new, self.options)
17: end