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 :: Переменная в шаблоне

 PHP.SU

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


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

> Описание: как в регэкспре "/some_shablon/" использовать переменную?
LeKot
Отправлено: 22 Октября, 2008 - 08:18:16
Post Id


Новичок


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


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




есть задача: составить функцию, которая будет помещать текст между тегами в массив (тегов может быть несколько во входном параметре)
пример обращения:
CODE (text):
скопировать код в буфер обмена
  1.  Param2Hash($text,<h1><h2>)

тэги могут быть разными и в разном количестве. Сперва я вытащил прег_сплитом тэги из входящих параметров в массив
CODE (text):
скопировать код в буфер обмена
  1. function Param2Hash($text, $param)
  2. //нулевой и последний пустые - иметь в виду
  3. $arr = preg_split("/[<>]+/",$param);

теперь $arr содержит [,h1,h2,]
Далее я хотел циклом перебрать массив с 1 по каунт(массив)-1 примерно так
CODE (text):
скопировать код в буфер обмена
  1. preg_match_all("~<$arr[$i]> и т.д.~")
$i - счетчик цикла
Но веть он воспримет $arr не как ссылку на массив, а как просто набор литералов. то же самое, с счетчиком. + $ означает знак конца строки. Если экранировать доллар слэшем, то он не будет концом строки, но и указателем на переменную не будет Недовольство, огорчение Вот не знаю как быть
 
 Top
Champion Супермодератор
Отправлено: 22 Октября, 2008 - 08:42:30
Post Id



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


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


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




LeKot пишет:
"~<$arr[$i]> и т.д.~"


Замените на '~<'.$arr[$i].'> итд'D общем все переменные вынесите из ковычек. А еще вроде можно так: $$var - тогда будет переменная
 
 Top
LeKot
Отправлено: 22 Октября, 2008 - 08:47:29
Post Id


Новичок


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


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




Спасибо, сейчас попробую Улыбка
(Добавление)
В принципе задача решена (алгоритм готов). Но синтаксически я где-то ошибся. Потому что код, представленный ниже выводит только:
Array ( [0] => Array ( ) [1] => Array ( ) ) Array ( [0] => Array ( ) [1] => Array ( ) [2] => Array ( ) [3] => Array ( ) ) Array ( [0] => Array ( ) [1] => Array ( ) [2] => Array ( ) [3] => Array ( ) [4] => Array ( ) [5] => Array ( ) )
А предпологалось "несколько" иное... Подскажите, где ошибка, пожалуйста.
CODE (text):
скопировать код в буфер обмена
  1. <html><body>
  2. <?php
  3.   //function Param2Hash($text, $param) // временно закомментировано
  4. $text = "<h1><b>Caption1</b></h1> some text <h2>Caption2</h2> <h3>Caption3</h3>"; // temp string
  5. $param = "<h1><h3>"; // temp string
  6. //нулевой и последний пустые - иметь в виду
  7. $arr = preg_split("/[<>]+/",$param);
  8. $i = 0;
  9. $return = array();
  10. while (++$i<count($arr))
  11. {
  12. preg_match_all('~<$$arr[$$i]>([0-9a-zA-Zа-яА-Я]*)[</$$arr[$$i]>]+~', $text, $tmp_array);
  13. $return = array_merge($return, $tmp_array);
  14. print_r($return); //temp string
  15. }
  16. ?></body></html>

(Добавление)
изменил строку регэкспра. вывод прежний. Нынешняя строка имеет следующий вид
CODE (text):
скопировать код в буфер обмена
  1. preg_match_all('~(<$$arr[$$i]>(.*)</$$arr[$$i])>~', $text, $tmp_array);

(Отредактировано автором: 22 Октября, 2008 - 09:57:00)

 
 Top
Champion Супермодератор
Отправлено: 22 Октября, 2008 - 10:37:56
Post Id



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


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


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




LeKot пишет:
CODE (text):
скопировать код в буфер обмена
  1. '~<$$arr[$$i]>([0-9a-zA-Zа-яА-Я]*)'


'~<'.$arr[$i]'.>([0-9a-zA-Zа-яА-Я]*)'
или так
"~<$$arr[$$i]>([0-9a-zA-Zа-яА-Я]*)"
или даже так
"~<{$$arr[$$i]}>([0-9a-zA-Zа-яА-Я]*)"

чувствуете разницу?
(Добавление)
$str = 'asfe';
echo '$str'; //увидите $str
echo "$str"; ..увидите asfe
 
 Top
LeKot
Отправлено: 22 Октября, 2008 - 11:08:56
Post Id


Новичок


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


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




а все равно фигню выводит. даже с вот таким регэкспром
CODE (text):
скопировать код в буфер обмена
  1. preg_match_all("~{<".$arr[$i].">}([0-9a-zA-Zа-яА-Я]*){<\/".$arr[$i].">}~", $text, $return[$i]);
 
 Top
Champion Супермодератор
Отправлено: 22 Октября, 2008 - 11:45:54
Post Id



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


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


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




1 - '~<'.$arr[$i]'.>([0-9a-zA-Zа-яА-Я]*)' так должно точно работать
2 - "~{<".$arr[$i].">}([ - я такого не писал
 
 Top
valenok
Отправлено: 22 Октября, 2008 - 13:04:21
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


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




implode('|',$arr) в самый первый вариант


-----
Truly yours, Sasha.
 
My status
 Top
LeKot
Отправлено: 22 Октября, 2008 - 16:31:20
Post Id


Новичок


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


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




2Champion на Ваш вариант ругаетсо, грит синтаксическая ошибка. На Ваш же, но доведённый до синтакс корректности выводит снова кучу вложенных в друг-друга массивов без значений.
А по второму Вы так и писали в варианте "или даже так" Улыбка
т.е. и моими регэкспрами и Вашими код "ловит" только пустые значения Недовольство, огорчение
UPD: массивы много потому, что я по дурости вывод в цикл положил. вытащенный из цикла вывод дает следующий результат: Array ( [0] => Array ( ) [1] => Array ( ) ) с любыми кавычками и двумя долларами, для экранирования переменной. С кавычками перед/после переменной ругается на синтаксис.
(Добавление)
2valenok, Спасибо ) от цикла можно избавиться теперь Улыбка
 
 Top
Champion Супермодератор
Отправлено: 22 Октября, 2008 - 16:54:24
Post Id



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


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


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




LeKot пишет:
А по второму Вы так и писали в варианте "или даже так"

Сравните внимательнее) - то что я написал - всё в двойных апострофах
 
 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