Class: Regexp
- Defined in:
- lib/rbot/irc.rb,
lib/rbot/messagemapper.rb,
lib/rbot/core/utils/extends.rb
Overview
Extensions to the Regexp class, with some common and/or complex regular expressions.
Defined Under Namespace
Modules: Irc
Constant Summary collapse
- DIGITS =
We start with some general-purpose ones which will be used in the Irc module too, but are useful regardless
/\d+/
- 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 =
IPv6, from Resolv::IPv6, without the A..z anchors
/#{HEX_DIGIT}{1,4}/
- 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/
Class Method Summary collapse
-
.new_list(reg, pfx = "") ⇒ Object
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.
Instance Method Summary collapse
-
#has_captures? ⇒ Boolean
a Regexp has captures when its source has open parenthesis which are preceded by an even number of slashes and not followed by a question mark.
-
#mm_cleanup ⇒ Object
The MessageMapper cleanup method: does both remove_capture and remove_head_tail.
-
#remove_captures ⇒ Object
We may want to remove captures.
-
#remove_head_tail ⇒ Object
We may want to remove head and tail anchors.
Class Method Details
.new_list(reg, pfx = "") ⇒ Object
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.
373 374 375 376 377 378 379 |
# File 'lib/rbot/core/utils/extends.rb', line 373 def Regexp.new_list(reg, pfx = "") if pfx.kind_of?(String) and pfx.empty? return %r(#{reg}(?:,?(?:\s+and)?\s+#{reg})*) else return %r(#{reg}(?:,?(?:\s+and)?(?:\s+#{pfx})?\s+#{reg})*) end end |
Instance Method Details
#has_captures? ⇒ Boolean
a Regexp has captures when its source has open parenthesis which are preceded by an even number of slashes and not followed by a question mark
7 8 9 |
# File 'lib/rbot/messagemapper.rb', line 7 def has_captures? self.source.match(/(?:^|[^\\])(?:\\\\)*\([^?]/) end |
#mm_cleanup ⇒ Object
The MessageMapper cleanup method: does both remove_capture and remove_head_tail
27 28 29 30 31 32 |
# File 'lib/rbot/messagemapper.rb', line 27 def mm_cleanup new = self.source.gsub(/(^|[^\\])((?:\\\\)*)\(([^?])/) { "%s%s(?:%s" % [$1, $2, $3] }.sub(/^\^/,'').sub(/\$$/,'') Regexp.new(new, self.) end |