function ParseStr($qwe, $default_op = "&")
{
$qwe=trim($qwe);
$qwe=preg_replace("/\s{0,}\+ {0,}/", "&", $qwe);
$qwe=preg_replace("/\s{0,}([()|~]) {0,}/", "\1", $qwe);
$qwe=preg_replace("/(\s{1,}|\&\|{1,}|\|\&{1,})/", $default_op, $qwe);
// remove unnesessary boolean operators
$qwe=preg_replace("/\|+/", "|", $qwe);
$qwe=preg_replace("/\&+/", "&", $qwe);
$qwe=preg_replace("/\~+/", "~", $qwe);
$qwe=preg_replace("/\|\&\|/", "&", $qwe);
$qwe=preg_replace("/[|&~]+$/", "", $qwe);
$qwe=preg_replace("/^[|&]+/", "", $qwe);
// transform "w1 ~w2" -> "w1 default_op ~ w2"
// ") ~w" -> ") default_op ~w"
// "w ~ (" -> "w default_op ~("
// ") w" -> ") default_op w"
// "w (" -> "w default_op ("
// ")(" -> ") default_op ("
$qwe=preg_replace("/([^&~|()]+)~([^&~|()]+)/", "\1".$default_op."~\2", $qwe);
$qwe=preg_replace("/\)~{1,}/", ")".$default_op."~", $qwe);
$qwe=preg_replace("/~{1,}\(/", ($default_op=="|"? "~|(": "&~("), $qwe);
$qwe=preg_replace("/\)([^&~|()]+)/", ")".$default_op."\1", $qwe);
$qwe=preg_replace("/([^&~|()]+)\(/", "\1".$default_op."(", $qwe);
$qwe=preg_replace("/\) *\(/", ")".$default_op."(", $qwe);
// remove unnesessary boolean operators
$qwe=preg_replace("/\|+/", "|", $qwe);
$qwe=preg_replace("/\&+/", "&", $qwe);
// remove errornous format of query - ie: '(&', '&)', '(|', '|)', '~&', '~|', '~)'
$qwe=preg_replace("/\(\&{1,}/", "(", $qwe);
$qwe=preg_replace("/\&{1,}\)/", ")", $qwe);
$qwe=preg_replace("/\~{1,}\)/", ")", $qwe);
$qwe=preg_replace("/\(\|{1,}/", "(", $qwe);
$qwe=preg_replace("/\|{1,}\)/", ")", $qwe);
$qwe=preg_replace("/\~{1,}\&{1,}/", "&", $qwe);
$qwe=preg_replace("/\~{1,}\|{1,}/", "|", $qwe);
$qwe=preg_replace("/\(\)/", "", $qwe);
$qwe=preg_replace("/^[|&]{1,}/", "", $qwe);
$qwe=preg_replace("/[|&~]{1,}$/", "", $qwe);
$qwe=preg_replace("/\|\&/", "&", $qwe);
$qwe=preg_replace("/\&\|/", "|", $qwe);
// remove unnesessary boolean operators
$qwe=preg_replace("/\|+/", "|", $qwe);
$qwe=preg_replace("/\&+/", "&", $qwe);
return($qwe);
}