Есть исходная строка: Apple {Orange / Lemon} {Pineapple} Pear 1224 {lots of strawberries} {test string} {grapefruit 123} надо её разбить на составляюшие следующим образом: 1) Apple 2) Orange / Lemon 3) Pineapple 4) Pear 5) 1224 6) lots of strawberries 7) test string 8) grapefruit 123 Т.е. каждое слово - новый элемент, но если группа слов стоит в круглых скобках {}, то эта группа является одним элементом. Можно ли это реализовать проще, чем использование str_replace много раз, о затем explode ? Спасибо!
PHP: <?php function purge($s) { return trim(($s{0} == '{' && $s{strlen($s) - 1} == '}') ? substr($s, 1, -1) : $s); } $s = 'Apple {Orange / Lemon} {Pineapple} Pear 1224 {lots of strawberries} {test string} {grapefruit 123}'; $parts = preg_split('#(\{.+\})|(\s+)#U', $s, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY); $parts = array_filter(array_map('purge', $parts), 'strlen'); header('Content-type: text/plain'); var_export($parts); результат Код (Text): array ( 0 => 'Apple', 2 => 'Orange / Lemon', 4 => 'Pineapple', 6 => 'Pear', 8 => '1224', 10 => 'lots of strawberries', 12 => 'test string', 14 => 'grapefruit 123', )