Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Vetrox
5 / 5 / 4
Регистрация: 08.10.2012
Сообщений: 184
1

Разбить текст в массив по заданным знакам

31.10.2018, 19:58. Просмотров 1580. Ответов 6
Метки нет (Все метки)

Добрый день, прошу Вас помочь в следующей ситуации.

Есть текст:

tex tex text text {text} text tex tex text

Как разбить этот текст на части в один массив, при условии, что текст может содержать разные символы, но делить нужно только при встрече фигурных стрелок?

Вот так результат должен иметь значения:

PHP
1
2
3
4
5
$massiv[0] == "tex tex text text";
$massiv[1] == "{";
$massiv[2] == "text";
$massiv[3] == "}";
$massiv[4] == "text tex tex text";
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2018, 19:58
Ответы с готовыми решениями:

Разбить текст на строки
Имеется текст в одну строку, например "машина легковая , мотоцикл ява , спортивный велосипед "...

Разбить текст в массив по строкам
Мне нужен php-код который например из переменной $text в которой содержится : $php = '1 строка 2...

Разбить текст на слова и потом снова собрать в текст
Здравствуйте! Подскажите пример разбиения текста на слова и потом сборка их снова в текст. Суть в...

Разбить текст
Есть текст, как разбить его так, чтобы после каждых 50 символов ставился тег <br>?

Разбить текст на предложения
Вообщем совсем недавно начал "ковырять" php, и вот постала такая небольшая задачка: есть текст,...

6
VNIIAEN
117 / 83 / 38
Регистрация: 09.07.2018
Сообщений: 228
31.10.2018, 20:27 2
PHP
1
2
3
4
5
6
7
8
9
$str = 'tex tex text text {text} text tex tex text';
 
$patt = '~([^{]+)(\{)([^}]+)(\})([^{]+)~';
 
if (preg_match($patt, $str, $arr)) {
    $arr = array_slice($arr, 1);
}
 
var_dump($arr);
1
Vetrox
5 / 5 / 4
Регистрация: 08.10.2012
Сообщений: 184
01.11.2018, 22:12  [ТС] 3
почти работает, только столкнулся с проблемой, прошу прощение что сразу не уточнил.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
array(5) {
  [0]=>
  string(18) "tex tex text text "
  [1]=>
  string(1) "{"
  [2]=>
  string(4) "text"
  [3]=>
  string(1) "}"
  [4]=>
  string(19) " text tex tex text "
}
это результат такой выходит
а если:
PHP
1
$str = 'tex tex text text {text} text tex tex text {tex} text text text {te} te te te text';
то результат остается прежним, 5 элементов в массиве, хотя должно быть 13.
0
VNIIAEN
117 / 83 / 38
Регистрация: 09.07.2018
Сообщений: 228
02.11.2018, 12:32 4
Лучший ответ Сообщение было отмечено Vetrox как решение

Решение

Цитата Сообщение от Vetrox Посмотреть сообщение
должно быть 13.
PHP
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
36
$str = 'tex tex text text {text} text tex tex text {tex} text text text {te} te te te text';
 
$patt = '~[^{}]+ | (?: { | } )~x';
preg_match_all($patt, $str, $arr);
 
var_dump($arr[0]);
/*
array(13) {
  [0]=>
  string(18) "tex tex text text "
  [1]=>
  string(1) "{"
  [2]=>
  string(4) "text"
  [3]=>
  string(1) "}"
  [4]=>
  string(19) " text tex tex text "
  [5]=>
  string(1) "{"
  [6]=>
  string(3) "tex"
  [7]=>
  string(1) "}"
  [8]=>
  string(16) " text text text "
  [9]=>
  string(1) "{"
  [10]=>
  string(2) "te"
  [11]=>
  string(1) "}"
  [12]=>
  string(14) " te te te text"
}
*/
1
Vetrox
5 / 5 / 4
Регистрация: 08.10.2012
Сообщений: 184
02.11.2018, 12:58  [ТС] 5
получилось!
0
Vetrox
5 / 5 / 4
Регистрация: 08.10.2012
Сообщений: 184
07.11.2018, 09:34  [ТС] 6
пытаюсь разобраться с выражениями но пока что не так быстро удается.

какое регулярное в такой же ситуации использовать для текста, где кроме фигурных еще и квадратные скобки появились?

[0] Do you like that dress? {A} The dress in the shop window. {B} The dress I am wearing.
0
VNIIAEN
117 / 83 / 38
Регистрация: 09.07.2018
Сообщений: 228
07.11.2018, 09:49 7
Лучший ответ Сообщение было отмечено Vetrox как решение

Решение

Vetrox,
PHP
1
2
3
4
5
6
$str = '[0] Do you like that dress? {A} The dress in the shop window. {B} The dress I am wearing.';
 
$patt = '~[^{}[\]]+ | (?: { | } | \[ | \] )~x';
preg_match_all($patt, $str, $arr);
 
var_dump($arr[0]);
Добавлено через 3 минуты
Можно шаблон немного оптимизировать
PHP
1
2
3
4
5
6
$str = '[0] Do you like that dress? {A} The dress in the shop window. {B} The dress I am wearing.';
 
$patt = '~[^{}[\]]+ | (?: [{}[\]] )~x';
preg_match_all($patt, $str, $arr);
 
var_dump($arr[0]);
1
07.11.2018, 09:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2018, 09:49

разбить массив
Здравствуйте,нужно из массива типа Array ( = 9/20 = 8/40 = 7/100 = 6/90 ...

Нужно разбить массив
Допустим названия характеристик я смогу разбить методомexplode(':' $products1); так как есть...

Разбить массив на клонки
Есть код который выводит массив $mas1=explode(" ", $amount1); $result1=count($mas1);...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru