<?php
//
// use as: php -f test.php "your_regex_here" > output.txt
function echo_($s="")
{
echo $s . PHP_EOL;
}
include('../../src/php/Regex.php');
echo_("Regex.VERSION = " . Regex::VERSION);
echo_("Testing Regex.Composer");
echo_("===============================================================");
$identifierSubRegex = Regex::Composer()
->characterGroup( )
->characters('_')
->range('a', 'z')
->end( )
->characterGroup( )
->characters('_')
->range('a', 'z')
->range('0', '9')
->end( )->zeroOrMore( )
->partial( );
$outregex = Regex::Composer()
->SOL( )
->nonCaptureGroup( )->either( )
->regexp( $identifierSubRegex )
->or_( )
->namedGroup( 'token' )->literal( '**aabb**' )->end( )
->any( )
->space( )
->or_( )
->digit( false )->oneOrMore( )
->end( 2 )->zeroOrMore( false )
->backReference( 'token' )
->EOL( )
->compose( 'i' );
echo_("Partial : " . $identifierSubRegex);
echo_("Composed : " . $outregex->pattern);
echo_("Expected : " . "/^(?:[_a-z][_a-z0-9]*|(\\*\\*aabb\\*\\*).\\s|\\D+*?)\\1$/i");
echo_("Output : " . print_r($outregex, true));
echo_("===============================================================");
echo_();
echo_("Testing Regex.Analyzer");
echo_("===============================================================");
$inregex = '/(?P<named_group>[abcde]+)fgh(?P=named_group)(?# a comment)/i';
$anal = Regex::Analyzer($inregex);
$peekChars = $anal->peek( );
$minLen = $anal->minimum( );
$maxLen = $anal->maximum( );
$regexp = $anal->compile( array('i'=>!empty($anal->fl['i'])?1:0,'u'=>1) );
$groups = $anal->groups();
$sampleStr = $anal->sample( 1, 5 );
for($i=0; $i<5; $i++)
{
$succ = preg_match($regexp, $sampleStr[$i], $m);
$sampleStr[$i] = array('sample'=>$sampleStr[$i],'match'=>$succ ? 'yes' : 'no', 'groups'=>array());
if ( $succ )
{
foreach($groups as $group=>$index)
$sampleStr[$i]['groups'][$group] = isset($m[$index]) ? $m[$index] : null;
}
}
echo_("Input : " . $inregex);
echo_("Regular Expression : " . $anal->input());
echo_("Regular Expression Flags : " . implode(',',array_keys($anal->fl)));
echo_("Reconstructed Regular Expression : " . $anal->source());
echo_("===============================================================");
echo_("Regular Expression Syntax Tree : ");
echo_(print_r($anal->tree(true), true));
echo_("===============================================================");
echo_("Regular Expression (Named) Matched Groups : ");
echo_(print_r($groups, true));
echo_("===============================================================");
echo_("Regular Expression Peek Characters : ");
echo_(print_r(array('positive'=>array_keys($peekChars['positive']),'negative'=>array_keys($peekChars['negative'])), true));
echo_("===============================================================");
echo_("Regular Expression Minimum / Maximum Length : ");
echo_(print_r(array('minimum'=>$minLen,'maximum'=>-1===$maxLen?'unlimited':$maxLen), true));
echo_("===============================================================");
echo_("Regular Expression Sample Match Strings : ");
echo_(print_r($sampleStr, true));
echo_("===============================================================");
|