X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость ( Вход | Регистрация )

Открыть тему
Тема закрыта
> Проблемы с регулярным выражением
dan1
dan1
Topic Starter сообщение 8.3.2011, 0:51; Ответить: dan1
Сообщение #1


Участник
***

Группа: User
Сообщений: 195
Регистрация: 12.8.2010
Из: Тагила
Поблагодарили: 74 раза
Репутация:   25  


Здравствуйте друзья. С регулярными выражениями редко имею дело, но вот появилась такая задача:
В переменной $str имеются такие конструкции: {INFO-1}, {INFO-2}, {INFO-3} и т.д. необходимо вычленить номер из этих конструкций (1, 2, 3, и т.д.) и использовать этот номер в качестве номера ячейки массива $blocks.
Делаю это так:

$str = preg_replace("/{INFO-([0-9]{1,5})}/i", $blocks['\\1'] ,$str);

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

Сообщение отредактировал dan1 - 8.3.2011, 0:52
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
sngrl
sngrl
сообщение 8.3.2011, 1:04; Ответить: sngrl
Сообщение #2


Участник
***


Группа: User
Сообщений: 158
Регистрация: 30.11.2010
Из: 61
Поблагодарили: 25 раз
Репутация:   3  


Экранируй конечно-же фигурные скобки {}!! Но возможно не прокатит такой вариант, надо пробовать... Т.к. \\1 возможно не будет распространяться на $block...

Можешь попробовать сделать так.
Сначала делаешь preg_match_all со своей регуляркой, например так:

preg_match_all("~\{INFO-(\d*?)\}~is", $str, $data);


Можешь сразу глянуть, что нашлось:

print_r($data);


А потом в цикле производишь замену:

foreach($data[1] as $n => $val) {
  $str = str_replace("{INFO-".$val."}", $blocks[$val], $str);
}


Экспериментируй, и все получится))

Сообщение отредактировал sngrl - 8.3.2011, 1:05


--------------------
icq: 2ббббб


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Aferist
Aferist
сообщение 8.3.2011, 1:17; Ответить: Aferist
Сообщение #3


Участник
***


Группа: User
Сообщений: 192
Регистрация: 22.11.2008
Поблагодарили: 30 раз
Репутация:   5  


попробуй так:
preg_match_all('|FO-([0-9]*).*|sUS', $str, $data);

$data - твой номер


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
dan1
dan1
Topic Starter сообщение 8.3.2011, 7:55; Ответить: dan1
Сообщение #4


Участник
***

Группа: User
Сообщений: 195
Регистрация: 12.8.2010
Из: Тагила
Поблагодарили: 74 раза
Репутация:   25  


Спасибо Вам огромное — проблема решена.
sngrl предложил полностью готовое решение smile.gif
Всё хотелось выполнить в одно действие, поэтому и просидел долго, вариант с preg_match_all() отметал, но теперь думаю, что без него никуда.

Спасибо ещё раз: sngrl, и Aferist. Ваши варианты работают.

Тему можно закрывать.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Проблемы с merchant.webmoney.ru
4 deather 570 12.10.2017, 15:46
автор: phoenix_kys
Открытая тема (нет новых ответов) Ищу работу, связанную с регулярным длительным нахождением online
Наполнение форумов (постинг), модерация (все популярные CMS)
22 home 7786 26.6.2016, 15:46
автор: home
Открытая тема (нет новых ответов) Проблемы с Kazapa
4 baracuda 1387 29.6.2015, 22:21
автор: baracuda


 



RSS Текстовая версия Сейчас: 12.12.2017, 8:32
Дизайн