![]() |
Модераторы: Aliance, skyboy, MoLeX, ksnk |
![]() ![]() ![]() |
|
Brabus2008 |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 18.4.2008 Где: Харьков Репутация: нет Всего: нет |
Добрый день. Помогите пожалуйста с решением вопроса, возможно кто-то в свое время эти грабли уже прошел.
Есть строка. Обычный текст, символы { и } - тоже текстовые:
Задача: выбрать из строки все $valueN за исключением тех, которые находятся в блоках, обрамленных { ... } Т.е. в результатах надо иметь $value3 и $value4. Долго бьюсь над вопросом, кучю вариантов испробовал. Например, паттерн
делает то что мне надо. Но это происходит до момента, пока в строке не появляется еще один блок { ... }. Пример по ссылке: http://gskinner.com/RegExr/?2va78 . Это online regex редактор. Кроме того я немного сомневаюсь в эффективности этого варианта ![]() В общем, помогите, господа, чем можете ![]() Это сообщение отредактировал(а) Brabus2008 - 25.11.2011, 21:57 |
||||
|
|||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 12 Всего: 386 |
постенькое решение - выкинуть из текста все парные скобки preg_replace('/{[^\{]*?}/','',$xxx) достаточное количество раз, пока их в тексте не останется, затем выковырять все нужные слова простой регуляркой.
Это сообщение отредактировал(а) ksnk - 26.11.2011, 11:21 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Brabus2008 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 18.4.2008 Где: Харьков Репутация: нет Всего: нет |
Ну, в принципе да. Проблема моей регулярки в парности тегов. Под него попадает фрагмент
text { text $value1 text $value2 text text } $value3 text $value4 { text $value5 test } и получается что в результате ничего не выбирается, т.к. внутри скобок мы должны пропускать $valueN. Обходные пути есть, типа такого. Можно вырезать все парные {}, разобрать оставшуюся строку, а потом содержимое {} вставить обратно (мне их еще отдельно парсить). Но остается надежда, что вопрос можно все же решить регуляркой. Сегодня опять пытаюсь - пока безрезультатно ![]() |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 12 Всего: 386 |
3 раза - для понятности?
![]()
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Brabus2008 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 18.4.2008 Где: Харьков Репутация: нет Всего: нет |
Да страница не обновлялась никак, Bad Gateway выдавало. А потом оказалось где-то проскочило ![]() Спасибо за реализацию вашего варианта. На самом деле у меня стоит задача еще и replace'нуть эти найденные $valueN. Потому я пытаюсь выбрать их одной регуляркой, чтобы использовать в preg_replace() или preg_replace_callback(). Ваш вариант тоже уже можно использовать. Потом просто строковыми функциями позаменять найденные фрагменты на то что мне нужно. Но это уже некоторые лишние телодвижения. А регуляркой бы - все так радужно кажется ![]() Вспомнилось выражение: "Если у вас есть проблема и вы думаете, что ее можно решить через регулярные выражения, значит у вас уже есть две проблемы" ![]() Это сообщение отредактировал(а) Brabus2008 - 26.11.2011, 15:45 |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Тексты | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |