@Haricot

PHP. Как составить регулярное выражения для разделения текста вложенной структуры?

Столкнулся со следующей проблемой.
Есть строка, например:
"Текст1 | {Вложенный1 | Вложенный2 } | Текст2"

Необходимо разделить строку на части по разделителю | так, что бы не учитывались разделители, находящиеся внутри фигурных скобок. Тоесть результат должен быть таким:
"Текст1"
"{Вложенный1 | Вложенный2 }"
"Текст2"

Предполагаю, что такое разделение можно сделать регулярным выражением. Буду признателен, если кто-то поможет его составить.

UPD: строка вида:
"Текст1 | что-то написано {Вложенный1 | Вложенный2 } что-то написано | Текст2"
должна разбиваться как:
Текст1
что-то написано {Вложенный1 | Вложенный2 } что-то написано
Текст2
  • Вопрос задан
  • 2329 просмотров
Пригласить эксперта
Ответы на вопрос 2
есть вариант.
как победить пробелы по краям я пока чето не соображу, но это можно и trim сделать.
$string = "Текст1 | {Вложенный1 | Вложенный2 } | Текст2";
preg_match_all('/\s?([^|\{\}]+|\s?\{.+\}\s?)\s?/', $string, $matches);
var_dump($matches[1]);

array(3) {
  [0]=>
  string(12) "Текст1 "
  [1]=>
  string(45) "{Вложенный1 | Вложенный2 } "
  [2]=>
  string(11) "Текст2"
}
Ответ написан
Gorily
@Gorily
Вступлю ка и я в клуб извращенцев :)
Вот так выглядит Split решение для .NET, возможно нужно допилить для PHP:
(?<!(\{[0-9а-яА-Я ]+))\|
Получается примерно так:
Raw Match Pattern:
(?<!(\{[0-9а-яА-Я ]+))\|

Match Array:
[0] = Текст1 
[1] =  {Вложенный1 | Вложенный2 } 
[2] =  Текст2

Как видно, мы просто проверяем, была ли до этого открыта фигурная скобка. Называется - ретроспективная проверка.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы