<?php


error_reporting
(E_ALL E_STRICT E_NOTICE E_WARNING);

ini_set('xdebug.default_enable''Off');
if (
function_exists('xdebug_disable'))
{
    
xdebug_disable();
}

define('STR_SUBJECT''subject');
define('STR_PATTERN''pattern');
define('STR_ACTION''action');

define('STR_MATCH_OFFSET_CAPTURE''offset_capture');
define('STR_SPLIT_DELIM_CAPTURE''delimit_capture');


$str_subject = (isset($_REQUEST[STR_SUBJECT])) ? $_REQUEST[STR_SUBJECT] : '';
$str_pattern = (isset($_REQUEST[STR_PATTERN])) ? $_REQUEST[STR_PATTERN] : '';

if (
get_magic_quotes_gpc())
{
    
$str_subject stripslashes($str_subject);
    
$str_pattern stripslashes($str_pattern);
}

$bool_action = isset($_REQUEST[STR_ACTION]);
$bool_regexp_invalide FALSE;
$str_message_erreur '';


$int_preg_match 0;
$str_preg_match '';

$int_preg_match_all 0;
$str_preg_match_all '';

$str_preg_split '';

if (
$bool_action && strlen($str_pattern))
{
    
ob_start();
    
$int_preg_match preg_match($str_pattern'');
    
$str_message_erreur ob_get_clean();
    if (
$str_message_erreur)
    {
        
$str_message_erreur htmlspecialchars(strip_tags($str_message_erreur));
        if (
preg_match('/ ([^:]*) found in/U'$str_message_erreur$arr_str_match))
        {
            
$str_message_erreur $arr_str_match[1];
        }
    }

    
$bool_regexp_invalide = ($int_preg_match === FALSE);

    if (!
$bool_regexp_invalide)
    {
        
$int_preg_match preg_match($str_pattern$str_subject$str_preg_match, (isset($_REQUEST[STR_MATCH_OFFSET_CAPTURE])) ? PREG_OFFSET_CAPTURE 0);
        
$int_preg_match_all preg_match_all($str_pattern$str_subject$str_preg_match_all);
        
$str_preg_split preg_split($str_pattern$str_subject, -1, ((isset($_REQUEST[STR_MATCH_OFFSET_CAPTURE])) ? PREG_SPLIT_OFFSET_CAPTURE 0) | (isset($_REQUEST[STR_SPLIT_DELIM_CAPTURE])) ? PREG_SPLIT_DELIM_CAPTURE 0);

        
ob_start(); var_dump($str_preg_match); $str_preg_match ob_get_clean();
        
ob_start(); var_dump($str_preg_match_all); $str_preg_match_all ob_get_clean();
        
ob_start(); var_dump($str_preg_split); $str_preg_split ob_get_clean();
    }
}

$str_subject htmlspecialchars($str_subject);
$str_pattern htmlspecialchars($str_pattern);

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
        <title>Preg testeur</title>
        <style type="text/css">
        <!--
        body *
        {
            font-family: monospace;
            font-size: 8pt;
        }

        p.warning
        {
            color: FireBrick;
        }

        input.text, textarea
        {
            width: 600px;
        }

        textarea
        {
            height: 200px;
        }

        input.submit
        {
            width: 100px;
            display: block;
        }

        div.bloc
        {
            border: 1px dotted #ccc;
        }

        div.titre
        {
            font-weight: bold;
        }
        -->
        </style>
        <script type="text/javascript">
        <!--;
            function on_load()
            {
                if (document && document.getElementById)
                {
                    var obj_pattern = document.getElementById('<?php print STR_PATTERN?>');
                    if (obj_pattern && obj_pattern.focus)
                    {
                        obj_pattern.focus();
                    }
                }
            }

        //-->
        </script>
    </head>
    <body onload="on_load();">
        <form>
            <input type="hidden" name="<?php print STR_ACTION?>"  value="<?php print STR_ACTION?>" />
            <div class="ligne">
                <label for="<?php print STR_SUBJECT?>">Subject</label>
                <textarea class="textarea" name="<?php print STR_SUBJECT?>" id="<?php print STR_SUBJECT?>"><?php print $str_subject?></textarea>
            </div>
            <div class="ligne">
                <label for="<?php print STR_PATTERN?>">Pattern</label>
                <input type="text" class="text" name="<?php print STR_PATTERN?>" id="<?php print STR_PATTERN?>" value="<?php print $str_pattern?>"/>
            </div>
            <div class="ligne">
                <label for="">Option</label>
                <br />
                <input class="checkbox" type="checkbox" name="<?php print STR_MATCH_OFFSET_CAPTURE?>" id="<?php print STR_MATCH_OFFSET_CAPTURE?><?php print (isset($_REQUEST[STR_MATCH_OFFSET_CAPTURE])) ? 'checked="checked"' ''?> />
                <label class="option" for="<?php print STR_MATCH_OFFSET_CAPTURE?>">PREG_OFFSET_CAPTURE</label>
                <br />
                <input class="checkbox" type="checkbox" name="<?php print STR_SPLIT_DELIM_CAPTURE?>" id="<?php print STR_SPLIT_DELIM_CAPTURE?><?php print (isset($_REQUEST[STR_SPLIT_DELIM_CAPTURE])) ? 'checked="checked"' ''?> />
                <label class="option" for="<?php print STR_SPLIT_DELIM_CAPTURE?>">PREG_SPLIT_OFFSET_CAPTURE</label>
            </div>
            <div class="ligne">
                <input type="submit" class="submit" value="test" />
            </div>
        </form>
<?php
if ($bool_action)
{
    if (
$bool_regexp_invalide)
    {
        if (
$str_message_erreur)
        {
            
$str_message_erreur '(' $str_message_erreur ')';
        }
        
printf('<p class="warning">Expression régulière invalide %s!</p>'$str_message_erreur);
    }
    else
    {
?>
        <div class="bloc">
            <div class="titre">
        <?php
            printf
('PREG_MATCH (%s)'$int_preg_match);
        
?>
            </div>
            <div class="tableau">
        <?php
            printf
('<pre>%s</pre>'htmlspecialchars($str_preg_match));
        
?>
            </div>
        </div>
        <div class="bloc">
            <div class="titre">
        <?php
            printf
('PREG_SPLIT');
        
?>
            </div>
            <div class="tableau">
        <?php
            printf
('<pre>%s</pre>'htmlspecialchars($str_preg_split));
        
?>
            </div>
        </div>
        <div class="bloc" onclick="alert(this.height);this.height='20px'">
            <div class="titre">
        <?php
            printf
('PREG_MATCH_ALL (%s)'$int_preg_match_all);
        
?>
            </div>
            <div class="tableau">
        <?php
            printf
('<pre>%s</pre>'htmlspecialchars($str_preg_match_all));
        
?>
            </div>
        </div>
<?php
    
}
}

echo 
'<hr />';
highlight_file(__FILE__);

?>
    </body>
</html>