Строка:
"test AND test2 OR test3 AND test4"
PHP:
preg_split(\s?AND\s?|\s?OR\s?, $string);
Результат:
["test", "test2", "test3", "test4"]
Требуемый результат:
["test", "test2", "test3", "test4"]
["AND", "OR", "AND"]
Как я могу получить этот результат?
Способ разделения захваченных разделителей, когда preg_split
используется с опцией PREG_SPLIT_DELIM_CAPTURE
.
$string = "test AND test2 OR test3 AND test4";
$arr = preg_split('~\s*\b(AND|OR)\b\s*~', $string, -1, PREG_SPLIT_DELIM_CAPTURE);
$andor = [];
$test = [];
foreach($arr as $k=>$v) {
if ($k & 1)
$andor[] = $v;
else
$test[] = $v;
}
print_r($test);
print_r($andor);
$k & 1
- побитовый оператор AND. Когда индекс $k
нечетен, это означает, что первый бит равен 1, тогда $k & 1
возвращает 1
. (разделители всегда имеют нечетный индекс, за исключением случаев использования PREG_SPLIT_NO_EMPTY
).
Вы можете использовать preg_split
и preg_match_all
как
$str = "test AND test2 OR test3 AND test4";
$arr1 = preg_split('/\b(AND|OR)\b/', $str);
preg_match_all('/\b(AND|OR)\b/', $str, $arr2);
print_r($arr1);
print_r($arr2[0]);
Else просто используйте ответ, предложенный @mario, используя PREG_SPLIT_DELIM_CAPTURE
PREG_SPLIT_DELIM_CAPTURE
между, а точнееpreg_match_all
и захватывать группы.