• Модуль: support
  • Путь к файлу: ~/bitrix/modules/support/classes/general/search.php
  • Класс: CSupportSearch
  • Вызов: CSupportSearch::ParseStr
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);
}