Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Замена шаблона {T_MAIN_CONTENT} на текст при помощи регулярных выражений
 
 автор: localGhost   (05.04.2005 в 03:34)   письмо автору
 
 

весь вечер вчера ломал голову пытался составить для следующего:

есть файл шаблона, в нем есть как бы текстовые шаблоны, выглядят так: {T_MAIN_CONTENT}....... значит нужно следующее: чтоб сначала вырезало MAIN_CONTENT а потом заменял {T_MAIN_CONTENT} на необходимую строку.......
нписал что-то подобное этому:

"(\{T_).*\}"

но не получилось: дело в том что в файле таких шаблончиков несколько, вот функция мне и вырезала с места где в первый раз встречаеться {T_ и по то место где в последний раз встречается }...... как исправить?

   
 
 автор: cheops   (05.04.2005 в 11:02)   письмо автору
 
   для: localGhost   (05.04.2005 в 03:34)
 

Хм... а вы используйте не T_, а всю строку "/\{T_MAIN_CONTENT\}/i", она же у вас не меняется:
<?php
  $text 
"есть файл шаблона, в нем есть как бы текстовые шаблоны, выглядят так: {T_MAIN_CONTENT}....... значит нужно следующее: чтоб сначала вырезало MAIN_CONTENT а потом заменял {T_MAIN_CONTENT} на необходимую строку.......нписал что-то подобное этому:";
  
$pattern "/\{T_MAIN_CONTENT\}/i";
  
$replacement "<b>HELLO</b>";
  echo 
preg_replace($pattern$replacement$text);
?>

Конструкции .* лучше вообще избегать - с помощью её очень сложно, что либо толковое сделать.

   
 
 автор: localGhost   (06.04.2005 в 03:31)   письмо автору
 
   для: cheops   (05.04.2005 в 11:02)
 

>Хм... а вы используйте не T_, а всю строку
>&quot;/{T_MAIN_CONTENT}/i&quot;, она же у вас не меняется:

я не уточнил...... с этим понятно все.... но дело в том что в строке {T_ ....... } может быть разное содержимое (например {T_LEFT_BLOCK}) так вот надо определить что именно указанно, и выполнить соответствующие операции по замене строки....... хотя тут можно это дело хитро обыграть........
ладно, а как тогда вытащить строчку между {T_ и }?

   
 
 автор: cheops   (06.04.2005 в 10:58)   письмо автору
 
   для: localGhost   (06.04.2005 в 03:31)
 

Я понял, здесь вам скорее понадобится замена при помощи функции обратного вызова, где вы сможете опеределить логику замены, вот скрипт-заготовка с нужным вам регулярным выражением
<?php
  
// функция обратного вызова
  // В ней определяется логика замены
  
function const_replace($matches
  {
    
// как обычно: $matches[0] -  полное вхождение шаблона
    // $matches[1] - вхождение первой подмаски,
    // заключенной в круглые скобки, и так далее...
    
if($matches[1] == "MAIN_CONTENT") return "<b>HELLO</b>";
    if(
$matches[1] == "TITLE") return "<b>TITLE</b>";
  }
  
// Производим замену
  
echo preg_replace_callback(
              
"|\{T_([^\}]+)\}|",
              
"const_replace",
              
$text);
?>

   
 
 автор: imi   (06.04.2005 в 11:11)   письмо автору
 
   для: localGhost   (06.04.2005 в 03:31)
 

Вот это должно помочь. Писал навскидку - могут быть неточности, но, думаю, смысл, понятен...

<?php
$text
="текст .... {T_FIRST} ненужное что-нибудь {DO_NOT_TAKE_THIS} еще текст.... {T_SECOND}";
$patern="/\{T_([^\}]*\}/";
preg_match_all ($patern$text$matches);
var_dump($matches);
?>

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования