@ 2016-08-08T19:00:04Z <?php
function parseSearchTerms($queryStr) {
$searchTerms = [
'canHave' => [],
'mustHave' => [],
'cannotHave' => []
];
$keyword = '';
$quoted = false;
$mod = null;
$escaped = false;
$spaced = true;
for($i=0,$l=strlen($queryStr);$i<$l;$i++) {
$char = $queryStr[$i];
if(ctype_space($char)) {
$char = ' ';
}
switch($char) {
case ' ':
if($quoted || !$spaced) {
$keyword .= $char;
$spaced = true;
}
else if(!$quoted && !empty($keyword)) {
if(is_null($mod)) {
$searchTerms['canHave'][] = $keyword;
}
else {
if($mod == '+') {
$searchTerms['mustHave'][] = $keyword;
}
else if($mod == '-') {
$searchTerms['cannotHave'][] = $keyword;
}
}
$keyword = '';
}
echo $keyword . PHP_EOL;
var_dump($quoted);
var_dump($spaced);
var_dump($mod);
echo PHP_EOL;
break;
case '"':
if(!$escaped) {
if($quoted) {
if(is_null($mod)) {
$searchTerms['canHave'][] = $keyword;
}
else {
if($mod == '+') {
$searchTerms['mustHave'][] = $keyword;
}
else if($mod == '-') {
$searchTerms['cannotHave'][] = $keyword;
}
}
$keyword = '';
$quoted = false;
}
}
break;
case '+':
case '-':
if($spaced) {
$mod = $char;
$spaced = false;
}
else {
$mod = null;
$keyword .= $char;
$spaced = false;
}
break;
default:
$keyword .= $char;
$spaced = false;
break;
}
}
if(!is_null($mod)) {
if($mod == '+') {
$searchTerms['mustHave'][] = $keyword;
}
else if($mod == '-') {
$searchTerms['cannotHave'][] = $keyword;
}
}
return $searchTerms;
}
var_dump(parseSearchTerms('+here are -no some "search terms"'));
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Output for 5.6.0 - 5.6.24 , 7.0.0 - 7.0.20 , 7.1.0 - 7.1.20 , 7.2.0 - 7.2.33 , 7.3.16 - 7.3.33 , 7.4.0 - 7.4.33 , 8.0.0 - 8.0.30 , 8.1.0 - 8.1.27 , 8.2.0 - 8.2.17 , 8.3.0 - 8.3.4 here
bool(false)
bool(true)
string(1) "+"
here are
bool(false)
bool(true)
string(1) "+"
here are no
bool(false)
bool(true)
string(1) "-"
here are no some
bool(false)
bool(true)
string(1) "-"
here are no some search
bool(false)
bool(true)
string(1) "-"
array(3) {
["canHave"]=>
array(0) {
}
["mustHave"]=>
array(0) {
}
["cannotHave"]=>
array(1) {
[0]=>
string(29) "here are no some search terms"
}
}
preferences:dark mode live preview
132.74 ms | 404 KiB | 179 Q