Здравствуйте!
Встал довольно срочный вопрос. В общем никак немогу составить правильно регулярное выражение на PHP.
Суть такая.
Есть некое количество переменных значений в фиг. скобках, в свою очередь в этих скобках могут быть ещё фигурные скобки. Таким образом, получается вложеннось. Но вложенность не может быть больше 1-го уровня, что естественно задачу облегчает. НО. Принципиально важно, чтобы в фиг. скобках вложенными были только фиг. скобки, а не какие другие делимиторы.
Вот пример исходной строки:
Основное {Значение 1|Значение 2|Значение 3 {Значение 3.1|Значение 3.2|Значение 3.3|} Значение 4{Значение 4.1|Значение 4.2|Значение 4.3|} Значение 5} Основное 2
Суть в том, что мне нужно получть отдельно:
- {Значение 1|Значение 2|Значение 3
- {Значение 3.1|Значение 3.2|Значение 3.3|}
- Значение 4
- {Значение 4.1|Значение 4.2|Значение 4.3|}
- Значение 5
и потом уже дальше с ними манипулировать.
Пробую preg_match_all("~\{(.*)\}~isU", $stroka, $fVarsArray, PREG_PATTERN_ORDER)
Где $stroka - исходная строка, $fVarsArray - массив того, что находит.
Но находит не то.
Вместо 1-го значения оно мне выдаёт {Значение 1|Значение 2|Значение 3 {Значение 3.1|Значение 3.2|Значение 3.3|}, а не {Значение 1|Значение 2|Значение 3
Подскажите, как мне быть.
1. Phobos - 16 Февраля, 2008 - 18:02:15 - перейти к сообщению
2. scuter - 17 Февраля, 2008 - 02:06:08 - перейти к сообщению
есть такие интересные функции,
http://www.php.su/functions/?explode
http://www.php.su/functions/?implode
но суде по всему вам нужно не это а перевести данные из JSON формата,
http://framework[dot]zend[dot]com/manual[dot][dot][dot]u/zend[dot]json[dot]html
http://www.php.su/functions/?explode
http://www.php.su/functions/?implode
но суде по всему вам нужно не это а перевести данные из JSON формата,
http://framework[dot]zend[dot]com/manual[dot][dot][dot]u/zend[dot]json[dot]html
3. Phobos - 17 Февраля, 2008 - 03:22:39 - перейти к сообщению
scuter пишет:
есть такие интересные функции,
http://www.php.su/functions/?explode
http://www.php.su/functions/?implode
http://www.php.su/functions/?explode
http://www.php.su/functions/?implode
Эти интересные функции я знаю прекрасно Но они мне здесь не помогут (хотя в целом в проге применяются)
Я же писал конкретно что нужно:
Цитата:
Суть в том, что мне нужно получть отдельно:
- {Значение 1|Значение 2|Значение 3
- {Значение 3.1|Значение 3.2|Значение 3.3|}
- Значение 4
- {Значение 4.1|Значение 4.2|Значение 4.3|}
- Значение 5
и потом уже дальше с ними манипулировать.
Суть в том, что мне нужно получть отдельно:
- {Значение 1|Значение 2|Значение 3
- {Значение 3.1|Значение 3.2|Значение 3.3|}
- Значение 4
- {Значение 4.1|Значение 4.2|Значение 4.3|}
- Значение 5
и потом уже дальше с ними манипулировать.
А как составить рег. выр., ну не въеду уже 2-й день. Просто логически немогу догадаться. Как можно скрипту объяснить - где у открывающейся скобки именно её закрывающая, а не первая попавшаяся по строке?..
Самое интересное - это же как-то реализовано в той же моей любимой Zend Studio: ставишь курсор перед скобкой а он тнбн ПРАВИЛЬНО определяет её закрывающую (или наоборот). Это не к тому, что я хочу интерпретатор ПХП на ПХП писать, просто суть похожая.
4. evgenijj - 17 Февраля, 2008 - 17:47:48 - перейти к сообщению
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- $text = "
- Основное {Значение 1|Значение 2|Значение 3
- {Значение 3.1|Значение 3.2|Значение 3.3|}
- Значение 4{Значение 4.1|Значение 4.2|Значение 4.3|}
- Значение 5} Основное 2";
- $txt = $matches[1][0];
- $tmp = $matches[0];
- for ( $i = 0; $i < $cnt; $i++ ) {
- $ids[$i] = 'array_'.$i;
- }
- for ( $i = 0; $i < $cnt; $i++ ) {
- }
- foreach( $res as $value ) echo $value.'<br/>';