Задать вопрос
Driver86
@Driver86
Немодератор toster.ru

Как разбить строку, в которой delimiter (разделитель) может быть экранирован, и это надо учесть?

Есть строка, вида:
данные 1 | данные 2 | данные 3.1 \| данные 3.2 \| данные 3.3 | данные 4

Её надо разбить по символу |
При этом участь, что он экранируется в некоторых местах \|
Т.е. надо получить массив вида:
[
    'данные 1',
    'данные 2',
    'данные 3.1 \| данные 3.2 \| данные 3.3',
    'данные 4',
];

Обычный explode тут, к сожалению, бессилен.
  • Вопрос задан
  • 236 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
vawsan
@vawsan
Frontend Developer
Сделайте предварительно replace последовательности \| на хитрую комбинацию, типа {-del-}, и результат побейте по символу |. А в полученном массиве замените {-del-} обратно на \.
Ответ написан
@Bloby
проще всего сделать так:
$str = stripslashes('данные 1 | данные 2 | данные 3.1 \| данные 3.2 \| данные 3.3 | данные 4');
$res = explode(' | ', $str);
var_dump($res);
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы