Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разбиение строки с несколькими разделителями 
V
    Опции темы
TNT86
Дата 8.10.2007, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 14.8.2006
Где: Одесса

Репутация: нет
Всего: нет



Есть строка и несколько типов разделителей пробел, запятая и так далее...

При использовании split и explode выходит какая-то лажа, то есть мягко говоря строка не разбивается.

Делаю что-то типа  $array=split(" !,",$string);

Есть какое решение этой проблемы?
--------------------
виртуальныe MYSQL и  PHP эксперты
PM MAIL WWW   Вверх
webevt
Дата 8.10.2007, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 235
Регистрация: 5.5.2005

Репутация: нет
Всего: 3



Код

$str = preg_split ( "/(!|,)/s", $text );

$str - массив
PM MAIL   Вверх
TNT86
Дата 8.10.2007, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 14.8.2006
Где: Одесса

Репутация: нет
Всего: нет



/s подразумевает пробел?

Добавлено через 5 минут и 44 секунды
Что-то все-равно так как нужно не работает :(

<?php
$string="hi mr agent!smith";

$result=preg_split("/(!|,)/s",$string);

foreach($result as $value)
{
   echo $value,'<BR><BR>';
};

?>

выдает 
hi mr agent

smith

а хотелось бы

hi

mr

ну и так далее, чтобы пробелы были тоже разделителями
--------------------
виртуальныe MYSQL и  PHP эксперты
PM MAIL WWW   Вверх
chin
Дата 8.10.2007, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 28.10.2006

Репутация: нет
Всего: нет



Код

preg_split ( "/(\s+|!|,)/", $text );


Это сообщение отредактировал(а) chin - 8.10.2007, 17:06
PM MAIL   Вверх
sTa1kEr
Дата 8.10.2007, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 5
Всего: 146



Цитата(TNT86 @  8.10.2007,  16:54 Найти цитируемый пост)
/s подразумевает пробел?

Нет. Это модификатор, означающий, что под набор символов "." будут так же попадать и переносы строк. 

Цитата(TNT86 @  8.10.2007,  16:54 Найти цитируемый пост)
Что-то все-равно так как нужно не работает :(

Код

$array = preg_split("/[!,\s]/", $string);


Это сообщение отредактировал(а) sTa1kEr - 8.10.2007, 17:08
PM MAIL   Вверх
TNT86
Дата 8.10.2007, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 14.8.2006
Где: Одесса

Репутация: нет
Всего: нет



Спасибо Всем, особенно to Chin - его код работает!


Только можешь объяснить почему он переносит пробелы?

--------------------
виртуальныe MYSQL и  PHP эксперты
PM MAIL WWW   Вверх
sTa1kEr
Дата 8.10.2007, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 5
Всего: 146



Цитата(TNT86 @  8.10.2007,  17:27 Найти цитируемый пост)
Только можешь объяснить почему он переносит пробелы?

Синтаксис регулярных выражений
Цитата

\s - любой пробельный символ 

PM MAIL   Вверх
chin
Дата 8.10.2007, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 28.10.2006

Репутация: нет
Всего: нет



TNT86,
Возьмите код sTa1kEr, у него правильнее.
PM MAIL   Вверх
CyClon
Дата 9.10.2007, 07:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 3.12.2005

Репутация: 1
Всего: 4



Код
<?php

$input = 'Word1, word2 word3 | word4 !word5     ,       word6|word7,word8    ,word9';

$result = preg_split('~[|!,\s]+~', $input);

print_r($result);

?>

Цитата
Array
(
    [0] => Word1
    [1] => word2
    [2] => word3
    [3] => word4
    [4] => word5
    [5] => word6
    [6] => word7
    [7] => word8
    [8] => word9
)


"|", "!", ",", "\s" - разделители. Можно убирать добавлять. "+" - значит, что разделители могут идти друг за другом (например запятая, а за ним пробел).

\s - любой пробельный символ (пробел, табуляция, перенос строки и т.д.)

Добавлено через 5 минут и 10 секунд
Можно еще так (Все зависит от задачи © MalHack):

Код
<?php

$input = 'Word1, word2 word3 | word4 !word5     ,       word6|word7,word8    ,word9';

$result = preg_split('~[^а-яА-Яa-zA-Z0-9]+~', $input);

print_r($result);

?>

Цитата
Array
(
    [0] => Word1
    [1] => word2
    [2] => word3
    [3] => word4
    [4] => word5
    [5] => word6
    [6] => word7
    [7] => word8
    [8] => word9
)


Разделителем будет считаться любой символ, кроме букв русского и английского алфавитов (верхний и нижний регистр), а так же цифр. То есть, имхо, самый оптимальный вариант разбить нужный текст на слова. В маске просто описываем символы, из которых может состоять слово (В данном случае а-я А-Я a-z A-Z 0-9).


--------------------
user posted image
PM   Вверх
TNT86
Дата 9.10.2007, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 14.8.2006
Где: Одесса

Репутация: нет
Всего: нет



Спасибо Всем! Вопрос исчерпан!
--------------------
виртуальныe MYSQL и  PHP эксперты
PM MAIL WWW   Вверх
119040
Дата 10.10.2007, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 22.1.2007

Репутация: нет
Всего: нет



CyClon, спасибо, мне тоже пригодилось!
Но как в списко исключений добавить пробел? Пробел в моем случае - не символ разделения!

Добавлено через 4 минуты и 39 секунд
Сорри, поспешил
Код

<?php

$input = 'Word1, word2 word3 | word4 !word5     ,       word6|word7,word8    ,word9';

$result = preg_split('~[|!]+~', $input);

print_r($result);

?>

Вопрос решен!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0512 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.