Получить массив разделителей с помощью preg-split

1

Строка:

"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

2 ответа

1

Способ разделения захваченных разделителей, когда 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).

1

Вы можете использовать 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню