Split z ogracznikiem tekstu - PHP

0

Cześć,
Kojarzy ktoś jakąś funkcję w PHP podobną do Split, która dzieli tekst na tablicę wg jakiegoś separatora, ale jednocześnie uwzględnia ogranicznik tekstu? Chodzi o to, że jak separator będzie w tekście, który będzie jakoś ograniczony np. cudzysłowem to nie będzie brał pod uwagę tego separatora w tekście?

pozdrawiam

0

Od tego są wyrażenia regularne.

    function split_by_words($str, $pattern = '/[\s]+/')
    {
        $temp = preg_split($pattern, $str, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
        $spaces = array();

        $words = array_reduce( $temp, function( &$result, $item) use ( &$spaces)
        {
            if( strlen( trim( $item)) === 0)
            {
                $spaces[] = strlen( $item);
            }
            else
            {
                $result[] = $item;
            }
            return $result;
        }, array());

        return $words;
    }
    
    $str = 'Lorem ipsum"dolor sit amet,consectetur;adipiscing elit.';
    $pattern = '/[\s\"\,\.\;]+/';    
    $words = split_by_words($str, $pattern);
    print_r($words);

Dzieli nie tylko po spacji ale i po znakach: " , . ;
Domyślnie funkcja dzieli po spacjach.

0
drorat1 napisał(a):

Dzieli nie tylko po spacji ale i po znakach: " , . ;
Domyślnie funkcja dzieli po spacjach.

Dziękuję Ci bardzo, ale chyba nie dokładnie o to chodziło.
Powiedzmy, ze mam taki ciąg znaków:

'pierwsza komórka; druga; "trzecia; komórka"; bla bla'

Każda komórka odseparowana jest znakiem średnika ";", jednak w jednej z tych komórek mamy tekst, który również zawiera średnik. I chodzi o to, żeby funkcja podzieliła ten cały ciąg na następujące komórki:

  1. pierwsza komórka
  2. druga
  3. "trzecia; komórka" <- tu w środku jest średnik (nie został on potraktowany jako separator tekstu), ale to dlatego, że jest w ograniczniku tekstu (cudzysłowie)
  4. bla bla

Ewentualnie można byłoby jeszcze dodatkowo usunąć ogranicznik tekstu (cudzysłów).
Ja obecnie to zrobiłem robiąc z tekstu tablicę i sprawdzając każdą komórkę po kolei czy nie jest przypadkiem separatorem lub ogranicznikiem tekstu :).

1 użytkowników online, w tym zalogowanych: 0, gości: 1