powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP] разбиение на подстроки
13 сообщений из 13, страница 1 из 1
[PHP] разбиение на подстроки
    #33527201
Фотография Damnedest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть строка, которую надо разбить на подстроки, но вот я только не знаю как правильнее реализовать данную задачу...

Код: plaintext
$string = "Блок1 Блок2 Блок3 'Блок4 с пробелом' Блок5";

Как правильно разбить данную строку на подстроки, чтобы строки заключенные в кавычки не разбивались.

Также желательно сделать, чтобы \' работала нармально и ее можно было употреблять в этом блоке...

Подскажите, какие есть методы?
...
Рейтинг: 0 / 0
[PHP] разбиение на подстроки
    #33527220
PantiL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если блоки отделены друг от друга одинаковым разделителем юзайте функцию explode()
...
Рейтинг: 0 / 0
[PHP] разбиение на подстроки
    #33527224
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
explode не пойдёт, прочитайте про дополнительное требование.
Думаю, можно написать подходящий шаблон для preg_split.
...
Рейтинг: 0 / 0
[PHP] разбиение на подстроки
    #33527249
Фотография Damnedest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробовал, но у меня не получилось...
Ведь надо чтобы по пробелу не разделялось, если он находится внутри одинарных кавычек...
...
Рейтинг: 0 / 0
[PHP] разбиение на подстроки
    #33527259
Фотография Olympico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DamnedestЕсть строка, которую надо разбить на подстроки, но вот я только не знаю как правильнее реализовать данную задачу...

Код: plaintext
$string = "Блок1 Блок2 Блок3 'Блок4 с пробелом' Блок5";

Как правильно разбить данную строку на подстроки, чтобы строки заключенные в кавычки не разбивались.

Также желательно сделать, чтобы \' работала нармально и ее можно было употреблять в этом блоке...

Подскажите, какие есть методы?


А если поробовать такой алгоритм:
1 - Подсчитать на каких позициях находится > пробел + ' <
2 - Удалить из исходной строки то, что в одинарных кавычках, записывая в массив.
3 - Разбить новую строку на состовляющие в другой массив.
4 - А потом пересчетом все это вывести эхолотом.

На мой взгляд вывод будет состоять из классических вложенных двух циклов, ну может трех, но не больше...
...
Рейтинг: 0 / 0
[PHP] разбиение на подстроки
    #33527274
Фотография Damnedest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlympicoА если поробовать такой алгоритм:
1 - Подсчитать на каких позициях находится > пробел + ' <
2 - Удалить из исходной строки то, что в одинарных кавычках, записывая в массив.
3 - Разбить новую строку на состовляющие в другой массив.
4 - А потом пересчетом все это вывести эхолотом.

На мой взгляд вывод будет состоять из классических вложенных двух циклов, ну может трех, но не больше...

Хм, а как определять кавычки? Как разбираться с вот такими вот комбинациями ('123 Блок \\')?
...
Рейтинг: 0 / 0
[PHP] разбиение на подстроки
    #33527285
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
...
Рейтинг: 0 / 0
[PHP] разбиение на подстроки
    #33527306
Фотография Olympico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Damnedest OlympicoА если поробовать такой алгоритм:
1 - Подсчитать на каких позициях находится > пробел + ' <
2 - Удалить из исходной строки то, что в одинарных кавычках, записывая в массив.
3 - Разбить новую строку на состовляющие в другой массив.
4 - А потом пересчетом все это вывести эхолотом.

На мой взгляд вывод будет состоять из классических вложенных двух циклов, ну может трех, но не больше...

Хм, а как определять кавычки? Как разбираться с вот такими вот комбинациями ('123 Блок \\')?


У тебя открытием условия должны быть пробел+кавычка, а дальше проверяешь момент закрытия...Все, что я могу тебе предложить это алгоритмы, а не саи функции, я их сам не знаю...когда что-то нужно ищу в мануале согласно выробатоному алгоритму...сначала напиши алгоритм работы твоего обработчика...
...
Рейтинг: 0 / 0
[PHP] разбиение на подстроки
    #33527307
Фотография Olympico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напиши приблезительную строку-пример, а потом поставь курсор в ее начало и стрелкой управления в право, на клавиатуре, в ручном режиме перемещай курсор и продумывай за него все действия, это и будет твой алгоритм.


"Прояви же красивое терпение"
(Сура Ступени, аят 5)
...
Рейтинг: 0 / 0
[PHP] разбиение на подстроки
    #33527687
AlexTheRaven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Olympico[quot Damnedest]
А если поробовать такой алгоритм<...>

Согласен, задачка - из курса информатики. По моему, укрупнённый алгоритм таков.

Ползёшь по строчке, пока не кончится. Посимвольно аккумулируешь.

При каждом нахождении пробела - пишешь аккумулятор в следующий элемент массива и сбрасываешь его.

При нахождении апострофа, но не закомментированного апострофа - перестаёшь сбрасывать аккумулятор в элемент при нахождении пробела.

При следующейм нахождении апострофа, но не закомментированного апострофа - сбрасываешь аккумулятор в элемент массива и снова начинаешь сбрасывать аккумулятор в элемент.

Написать шаблон для preg_split, конечно, можно, но по-моему это намного сложнее... Хотя "изящнее".
...
Рейтинг: 0 / 0
[PHP] разбиение на подстроки
    #33528159
Фотография Damnedest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем большое спасибо за помощь... просто думал, что можно реализовать данную функцию при помощи регулярных выражений.
...
Рейтинг: 0 / 0
[PHP] разбиение на подстроки
    #33528381
VERS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
* php.net/fgetcsv
И все таки почитайте эту ссылку ... уж больно напоминает структуру csv...
...
Рейтинг: 0 / 0
[PHP] разбиение на подстроки
    #33528752
Фотография Damnedest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
function parse($str,$f_delim = ' ',$r_delim = "\n",$qual = "'")
{
   $output = array();
   $row = array();
   $word = '';

   $len = strlen($str);
   $inside = false;

   $skipchars = array($qual,'\\');

   for ($i = 0; $i < $len; ++$i) {
       $c = $str[$i];
       if (!$inside && $c == $f_delim) {
           $row[] = $word;
           $word = '';
       } elseif (!$inside && $c == $r_delim) {
           $row[] = $word;
           $word = '';
           $output[] = $row;
           $row = array();
       } else if ($inside && in_array($c,$skipchars) && ($i+ 1  < $len && $str[$i+ 1 ] == $qual)) {
           $word .= $qual;
           ++$i;
       } else if ($c == $qual) {
           $inside = !$inside;
       } else {
           $word .= $c;
       }
   }

   $row[] = $word;
   $output[] = $row;

   return $output;
}

Спасибо большое. Вот что я нашел...
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP] разбиение на подстроки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]