Documented version
<?php

/**
 * Class to apply an array of regular expressions
 * to an array of items. Supports first match only
 * (as in preg_match) and matching all possibilities
 * (as in preg_match_all), as well as retrieval of
 * results from a named regular expression pattern.
 *
 * Example of use:
 *
 * <pre>
 * require_once 'SDPHP/MondoRegex.php';
 * 
 * $reList = array (
 *    'funcs" => "/function (\w+)\s?\(/",
 *    'assign" => "/\s+([^\s]+)\s+=\s+(.+);/",
 *    'varname" => "/([$]\w+[-]*[>]*\w+)/"
 *    );
 * $inputList = file("/path/to/script.php");
 * $mondo  = new MondoRegex($reList);
 * echo "Using match\n--------------\n";
 * $mondo->match($inputList);
 * print_r($mondo->getMatches());
 * echo "\nUsing match_all\n--------------\n";
 * $mondo->matchAll($inputList);
 * print_r($mondo->getMatches());
 * echo "\nGetting only the matches to the 'funcs' regular expression\n";
 * echo "----------------------------------------------------------\n";
 * print_r($mondo->getMatchesFor('funcs');
 * </pre>
 *
 * @package SDPHP::MondoRegex
 * @version 0.1.0
 * @copyright Jesus M. Castagnetto, 2003
 * @author Jesus M. Castagnetto
 *
 * License: PHP License 2.0 or later
 * Last Updated: Thursday 2003-06-05 06:15:25 PDT.
 */
class MondoRegex {/*{{{*/

    /**
     * List of regular expressions
     *
     * @var array
     * @access private
     */
 
var $_reList = array;

    
/**
     * List of matches
     *
     * @var array
     * @access private
     */
 
var $_matchList = array();

    
/**
     * Class constructor
     *
     * @param optional array $reList associative array of regular expressions
     * @return MondoRegex object
     * @access public
     */
 
function MondoRegex($reList "")/*{{{*/
 
{
  if (!empty(
$reList) && is_array($reList)) {
   
$this->setRegexList($reList);
        }
 }
/*}}}*/

    /**
     * Sets the regular expression list
     *
     * @param optional array $reList associative array of regular expressions
     * @return void
     * @access public
     */
    
function setRegexList($reList
    {
        if (
is_array($reList)) {
            
$this->_reList $reList;
        }
    }

    
/**
     * Do a simple matching on the input
     *
     * @param array $inputList array of strings
     * @return boolean true on success, false otherwise
     * @access public
     */
 
function match($inputList)/*{{{*/
 
{
  return 
$this->_reMatch("preg_match"$inputList);
 }
/*}}}*/

    /**
     * Perform all possible matches on the input
     *
     * @param array $inputList array of strings
     * @return boolean true on success, false otherwise
     * @access public
     */
 
function matchAll($inputList)/*{{{*/
 
{
  return 
$this->_reMatch("preg_match_all"$inputList);
 }
/*}}}*/

    /**
     * Retrieve all matches from the last operation
     *
     * @return array of matches
     * @access public
     */
 
function getMatches()/*{{{*/
 
{
  return 
$this->_matchList;
 }
/*}}}*/

    /**
     * Retrieve the matches for the named regular expression
     * 
     * @param string $reName the name of the regular expression
     * @return array|false an array if the name exists, false otherwise
     */
 
function getMatchesForKey($reName)/*{{{*/
 
{
  if (
in_array($reName,array_keys($this->_matchList))) {
   return 
$this->_matchList[$reName];
        } else {
   return 
false;
        }
 }
/*}}}*/

    /**
     * Retrieve the named regular expressions that gave a match
     *
     * @return array|false an array of keys on success, false otherwise
     * @access public
     */
 
function getMatchKeys()/*{{{*/
 
{
        if (empty(
$this->_matchList)) {
            return 
false;
        } else {
            return 
array_keys($this->_matchList);
        }
 }
/*}}}*/

    /**
     * Utility function to perform the regular expression matching
     *
     * @param string $reFunc regular expression function to use
     * @param array $inputList array of input strings
     * @return boolean true on success, false otherwise
     * @access private
     */
 
function _reMatch($reFunc$inputList)/*{{{*/
 
{
  
$this->_matchList = array();

  if (empty(
$this->_reList) || !array($inputList)) {
            return 
false;
        }

  foreach (
$this->_reList as $reName=>$reStr) {
   foreach (
$inputList as $input) {
    if (
$reFunc($reStr$input, &$hits)) {
     if (!empty(
$hits)) {
      
$this->_matchList[$reName][] = $hits;
     }
    }
   }
  }
  return !empty(
$this->_matchList);
 }
/*}}}*/

}/*}}}*/

?>