web 2.0

PHP: Boolean Queries (AND, OR, NOT)

Online Solution Int - Webentwicklung

Draft 0.1 in PHP: Boolean Queries (AND, OR, NOT)


function boolean_query_match($str,$query,$case)
{
$str=explode(" ",$str);
$query=eregi_replace("\("," ( ",$query);
$query=eregi_replace("\)"," ) ",$query);
$temp=explode(" ",$query);
//strip whitespaces
for($i=0;$i {
if($temp[$i]!=" " && !empty($temp[$i]) && $temp[$i]!="")
{
$token[]=$temp[$i];
}
}
//build expression
for($i=0;$i {
if($case==true)
{
if($token[$i]=='AND')
$token[$i]=' && ';
elseif($token[$i]=='OR')
$token[$i]=' || ';
elseif($token[$i]=='NOT')
$token[$i]='!';
elseif(ereg('^[a-zA-Z0-9]*$',$token[$i]))
{
if(in_array($token[$i],$str))
{
$token[$i]= 1;
}
else
{
$token[$i]= 0;
}
}
elseif(ereg('^[a-zA-Z0-9\*]*$',$token[$i]))
{
$token[$i]=eregi_replace('\*','.\*',$token[$i]);
$mask='['.$token[$i].']*';
for($j=0;$j {
if(ereg($mask,$str[$j]))
$f=1;
}
if($f==1)
$token[$i]=1;
else
$token[$i]=0;
}
}
elseif($case==false)
{
if($token[$i]=='AND')
$token[$i]=' && ';
elseif($token[$i]=='OR')
$token[$i]=' || ';
elseif($token[$i]=='NOT')
$token[$i]='!';
elseif(eregi('^[a-zA-Z0-9]*$',$token[$i]))
{
if(in_array($token[$i],$str))
{
$token[$i]= 1;
}
else
{
$token[$i]= 0;
}
}
elseif(ereg('^[a-zA-Z0-9\*]*$',$token[$i]))
{
$token[$i]=eregi_replace('\*','.\*',$token[$i]);
$mask='['.$token[$i].']*';
for($j=0;$j {
if(eregi($mask,$str[$j]))
$f=1;
}
if($f==1)
$token[$i]=1;
else
$token[$i]=0;
}
}
}
$exp=implode(" ",$token);
if(eregi('^[01 ]*$',$exp))
{
if(eregi('0',$exp))
{
return 'false';
}
else
return 'true';
}
eval("\$exp = $exp;");
return ($exp) ? 'true' : 'false';
}

To be continued...

Leave a Reply