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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Группировка подмасок, regexp 
:(
    Опции темы
DeAle
Дата 19.11.2009, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



$data = 'jkdf {hello world} 434 {o lo looooo}';
 
preg_match_all( '#(?:\{(hello)\s+(world)\})|(?:\{(o)\s+(lo)\s+(looooo)\})#ui', $data, $aa, PREG_SET_ORDER );
 

вывод:
[0] => Array
(
  [0] => {hello world}
  [1] => hello
  [2] => world
)
 
[1] => Array
(
  [0] => {o lo looooo}
  [1] =>
  [2] =>
  [3] => o
  [4] => lo
  [5] => looooo
)
 
Вопрос: как правильно сгруппировать подмаски, чтобы не было пустых индексов во втором массиве.
  [1] =>
  [2] =>
Они появляются из-за (hello)\s+(world) которых второе условие ловит из первого.
Необходимо чтобы результат был таким:
[0] => Array
(
  [0] => {hello world}
  [1] => hello
  [2] => world
)
 
[1] => Array
(
  [0] => {o lo looooo}
  [1] => o
  [2] => lo
  [3] => looooo
)
 
Удаление пустых значений массива не подойдет
PM MAIL   Вверх
patap
Дата 19.11.2009, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



При данном раскладе, сдается мне, что такого результата достичь нельзя.
Опиши реальную задачу. Не ужели ты собираешься искать при помощи регулярных выражений статические подстроки, типа hello world?



--------------------
На боку кобура болталась, сзади шашка отцовская звякала. 
Впереди меня все хохотало, а позади все плакало (с)
PM MAIL ICQ   Вверх
DeAle
Дата 19.11.2009, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



patap, нет, я к примеру дал hello world и ololo чтобы не загромождать читаемость. В реале таких подмасок несколько которые разные тэги вырезают.

Опиши реальную задачу:
Это для шаблонизатора, вместо hello world будет к примеру
{(if) условие}{/if}
вместо ololo
{(include) file}

далее данные передаются через callback, функции, которая читает первый ключ [1] и в зависимости от его значения, if или include, работает с остальными данными. Для inlude только два ключа, условие для if создает минимум 5 ключей, 2 из которых создаются пустыми из-за первой подмаски. В итоге их 7
PM MAIL   Вверх
patap
Дата 20.11.2009, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



приведе полный код, и подробные входные данные. А то лично я пока не могу сути уловить smile
Может глядя на код и данные ситуация прояснится


--------------------
На боку кобура болталась, сзади шашка отцовская звякала. 
Впереди меня все хохотало, а позади все плакало (с)
PM MAIL ICQ   Вверх
Pitlord
Дата 23.11.2009, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



DeAle, лучше сделайте просто общее выражение типа
Код

$regexp = '/{(.*?)}/';

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


 




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


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

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