Функция разнесения не в разорванном характере - PullRequest
0 голосов
/ 25 февраля 2011

Я ищу функцию типа explode, которая будет разбивать строку по символам, а также принимать список символов, чтобы игнорировать, если символ находится внутри них.

Например:

$str = "hello, this is, a test 'some, string' thanks";
explode_func($str, ",", "'");

Это взорвало бы $str на ,, но игнорировало бы , в пределах '

Ожидаемый результат:

Array
(
    [0] => hello
    [1] => this is
    [2] => a test
    [3] => thanks
)

Другой пример:

$str = "hello, this is, a test (some, string) thanks";
explode_func($str, ",", "()");

Это взорвало бы $str на ,, но игнорировало бы любые , между ( и ), чтобы получить тот же результат.

Есть идеи?

Ответы [ 2 ]

5 голосов
/ 25 февраля 2011

str_getcsv ()

$str = "hello, this is, a test 'some, string' thanks";
$array = str_getcsv($str, ",", "'");

, что должно дать:

Array
(
    [0] => hello
    [1] => this is
    [2] => a test 'some, string' thanks
)
2 голосов
/ 25 февраля 2011

Лучше всего было бы сначала удалить области, которые вы хотите игнорировать.

function explode($str, $separator, $ignore_pattern) {
    $newStr = preg_replace($ignore_pattern, '', $str);
    return explode($separator, $str);
}

использование:

$str = "hello, this is, a test (some, string) thanks";
$array = explode($str, ',', '/\(.*?\)/');

Не проверено, но теория верна

...