Обработка разделения строк в PHP: методы игнорирования кавычек с помощью Explode()

Когда дело доходит до обработки строк в PHP, функция explode()может оказаться весьма полезной. Однако, если вы хотите игнорировать разделение внутри кавычек, для этого нет встроенной функции. Вам нужно будет реализовать собственное решение. Вот несколько методов, которые вы можете рассмотреть:

Метод 1: регулярное выражение
Вы можете использовать регулярные выражения для разделения строки, исключая части внутри кавычек. Вот пример:

$string = 'Hello "World, Foo" Bar "Baz, Qux"';
$pattern = '/("[^"]*"|[^"\s]+)/';
$result = preg_match_all($pattern, $string, $matches);
$parts = $matches[0];

В этом методе шаблон регулярного выражения ("[^"]*"|[^"\s]+)соответствует строке в кавычках ("[^"] *") или последовательность символов без кавычек и пробелов ([^"\s]+).

Метод 2: анализ вручную
Другой подход заключается в ручном анализе строки посимвольно, отслеживании кавычек и соответствующем разделении. Вот пример реализации:

$string = 'Hello "World, Foo" Bar "Baz, Qux"';
$parts = [];
$insideQuotes = false;
$currentPart = '';
for ($i = 0; $i < strlen($string); $i++) {
    $char = $string[$i];
    if ($char == '"') {
        $insideQuotes = !$insideQuotes;
        $currentPart .= $char;
    } elseif ($char == ' ' && !$insideQuotes) {
        if (!empty($currentPart)) {
            $parts[] = $currentPart;
            $currentPart = '';
        }
    } else {
        $currentPart .= $char;
    }
}
if (!empty($currentPart)) {
    $parts[] = $currentPart;
}

Этот метод перебирает каждый символ в строке и проверяет, является ли это кавычкой или пробелом. Если это кавычка, переключается флаг insideQuotes. Если это пробел, а не кавычки, текущая часть добавляется в массив результатов.