#!/usr/bin/env python
# *public domain* (who wants to keep this crap?)

# Philosophy:
#
#  - Compiling regexp patterns is not a good idea.
#    A pattern is used somewhere else from where it is defined.
#  - Rather, use a pattern on-the-fly and cache the compiled one
#    in a global dictionary.
#  - "not-found" results should be received not as a value,
#    but as an exception.
#

# Sample:
#
#   import reg
#   try:
#     (hostname, dirname) = reg.extract(r"^http://([\w.]+)(/.*)?", url)
#   except reg.PatternNotFound:
#     # not found
#


import re

_REGEXP = {}
def _getregex(pat, flag):
  global _REGEXP
  try:
    r = _REGEXP[pat]
  except KeyError:
    r = re.compile(pat, flag)
    _REGEXP[pat] = r
  return r

class PatternNotFound(LookupError):
  pass

def extract(pat, s, flag=0):
  m = _getregex(pat, flag).match(s)
  if not m: raise PatternNotFound(pat, s)
  return m.groups()

def find_extract(pat, s, i=0, flag=0):
  m = _getregex(pat, flag).search(s, i)
  if not m: raise PatternNotFound(pat, s)
  return m.groups()

def split(pat, s, maxsplit=0, flag=0):
  return _getregex(pat, flag).split(s, maxsplit)
