Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: preg_match выводит не то что нужно

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
android
Отправлено: 25 Июля, 2013 - 18:11:52
Post Id


Посетитель


Покинул форум
Сообщений всего: 335
Дата рег-ции: Сент. 2011  


Помог: 0 раз(а)




Добрый вечер, неправильно работает preg_match_all, дело в том что он выводит близкий элемент, а нужно что бы он работал немного по другому.

Мой код:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. header("Content-Type: text/html;charset=utf-8");
  4. $html = '
  5. [fake=menu]
  6. <div>
  7. [fake=submenu]Под меню[/fake]
  8. </div>
  9. [/fake]
  10. ';
  11.  
  12. preg_match_all('!\\[fake=([a-z_]+)\\](.*?)\\[\/fake\\]!is', $html, $result, PREG_SET_ORDER);
  13.  
  14. foreach($result as $key=>$val) {
  15.         $html = preg_replace('!\\[fake='.$val[1].'\\](.*?)\\[\/fake\\]!is', '\\1', $html);
  16. }
  17.  
  18. echo $html;
  19. ?>
  20.  


В итоге получается:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <div>
  3. [fake=submenu]Под меню
  4. </div>
  5. [/fake]
  6.  


А мне нужно что бы preg_match обрабатывал все по порядку.

Сначала [fake=menu][/fake] а после то что внутри него...

Кол-во fake - n-ное
 
 Top
DeepVarvar Супермодератор
Отправлено: 25 Июля, 2013 - 18:27:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Используй preg_replace_callback для множественных замен.
Хотя и сам preg_replace умеет множественные замены.
Т.е. в любом случае первый ход с preg_match_all вообще тут не нужен.
 
 Top
soffrick
Отправлено: 25 Июля, 2013 - 18:36:37
Post Id



Посетитель


Покинул форум
Сообщений всего: 379
Дата рег-ции: Май 2012  
Откуда: Россия, Москва


Помог: 17 раз(а)




CODE (html):
скопировать код в буфер обмена
  1. <div id="menu">
  2.     <div>
  3.         <div id="submenu">Под меню</div>
  4.     </div>
  5. </div>
  6.  
?
Спойлер (Отобразить)


-----
Правильный вопрос - уже половина правильного ответа!

p.s. индусы повсюду, будьте осторожны!
 
 Top
android
Отправлено: 25 Июля, 2013 - 18:38:06
Post Id


Посетитель


Покинул форум
Сообщений всего: 335
Дата рег-ции: Сент. 2011  


Помог: 0 раз(а)




DeepVarvar нужен, у вас не весь код, перед этим я проверяю значение fake=
Если есть в массиве то заменяем.
(Добавление)
Все что предложили - не то.

Не работает как нужно. Вы бы проверяли перед тем как писать Улыбка
 
 Top
soffrick
Отправлено: 25 Июля, 2013 - 18:41:19
Post Id



Посетитель


Покинул форум
Сообщений всего: 379
Дата рег-ции: Май 2012  
Откуда: Россия, Москва


Помог: 17 раз(а)




android пишет:
Вы бы проверяли перед тем как писать

покажи что на выходе надо
(Добавление)
CODE (html):
скопировать код в буфер обмена
  1. menu
  2. <div>
  3. submenuПод меню
  4. </div>

может ты этого хотел?
(Добавление)
или может ты хотел
CODE (html):
скопировать код в буфер обмена
  1. <div>
  2. Под меню
  3. </div>

?
(Добавление)
android пишет:
нужен, у вас не весь код

ок


-----
Правильный вопрос - уже половина правильного ответа!

p.s. индусы повсюду, будьте осторожны!
 
 Top
DeepVarvar Супермодератор
Отправлено: 25 Июля, 2013 - 19:47:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




android пишет:
нужен, у вас не весь код, перед этим я проверяю значение fake=
Если есть в массиве то заменяем.
Не нужен - preg_replace сам ищет и сам заменяет. Зачем лишнее звено?
 
 Top
Okula
Отправлено: 25 Июля, 2013 - 19:59:18
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




Тогда уж лучше так:
PHP:
скопировать код в буфер обмена
  1. $html = preg_replace('~\[fake=(.+)\](.+)\[fake\]~isU', '<div id="$1">$2</div>', $html);
 
 Top
soffrick
Отправлено: 25 Июля, 2013 - 20:12:01
Post Id



Посетитель


Покинул форум
Сообщений всего: 379
Дата рег-ции: Май 2012  
Откуда: Россия, Москва


Помог: 17 раз(а)




Okula пишет:
Тогда уж лучше так:
PHP:
скопировать код в буфер обмена
  1. $html = preg_replace('~\[fake=(.+)\](.+)\[fake\]~isU', '<div id="$1">$2</div>', $html);

какой результат ?


-----
Правильный вопрос - уже половина правильного ответа!

p.s. индусы повсюду, будьте осторожны!
 
 Top
android
Отправлено: 26 Июля, 2013 - 15:24:51
Post Id


Посетитель


Покинул форум
Сообщений всего: 335
Дата рег-ции: Сент. 2011  


Помог: 0 раз(а)




Ну что не понятного?

Если в массиве есть submenu то контент внутри [fake=submenu]Под меню[/fake] становится таким: Под меню

И с другими все так же.


'<div id="$1">$2</div>' Что это скажите мне пожалуйста!? У меня проверка доступа, если есть в массиве то разрешаем показ удаляя теги и показывая только то что внутри!

Там может быть не только div могут быть самые разные теги.
(Добавление)
Цитата:
Не нужен - preg_replace сам ищет и сам заменяет. Зачем лишнее звено?


Вот ответ: перед этим я проверяю значение fake=
Если есть в массиве то заменяем.

Что не понятного? Покажите пример где вы без mach проверите наличие ключа в массиве!


Отредактировано администратором: EuGen, 27 Июля, 2013 - 15:26:06
Поднимать свои темы на конференции не разрешается. Устное предупреждение.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB