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

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

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: сделать trim в регулярку

Сообщения:  [1-10]    [11-20]  [21-21] 

 
 автор: psychomc   (18.04.2010 в 10:22)   письмо автору
 
   для: big-trot   (17.04.2010 в 18:17)
 

тема живёт :)

ваш вариант работает, но есть один момент: как мне в replacement.перед и после функции trim добавить еще произвольный текст?
что-то типа
<?php
$text 
preg_replace("#start((?:(?!end).)*)end#ie""какойто-текст trim('$1') и еще текст"$text);


пробовал извращаться по-разному с кавычками, но что-то как-то не удавось. спасибо

p.s я понимаю что там eval, но все-таки может есть какие-нибудь варианты...

  Ответить  
 
 автор: big-trot   (17.04.2010 в 18:17)   письмо автору
 
   для: baston   (17.04.2010 в 10:56)
 


// в общем есть текст
$text = "start любой текст end start опять текст end";
// и есть регулярка которая вырезает и изменяет текст между start и end
$text = preg_replace("#start((?:(?!end).)*)end#ie", "trim('$1')", $text);

  Ответить  
 
 автор: baston   (17.04.2010 в 10:56)   письмо автору
 
   для: baston   (17.04.2010 в 08:40)
 

Например, так:
<?php
$text 
"start любой у текст е end. start опять 1, текст entropy end";
$result = array();    //массив с результатами
//Вспомогательные переменные
$start 0;
$pos2 1;
//Начинаем цикл
while($pos2)    //пока истинно лог.выражение
{
  
//Начало искомого текста
  
$pos1 mb_strpos($text"start"$start);
  
//Конец искомого текста
  
$pos2 =  mb_strpos($text"end"$pos1);
  
//Задаем условия, при которых продолжаем вытаскивать искомый текст
    
if(($pos1 && $pos2 && $start 0) ||
          (
$pos1 >= && $pos2 && $start == 0))
  {
    
//Заносим найденный текст в массив
    
$result[] = trim(mb_substr($text$pos1 5$pos2 $pos1 5));
    
$start =  $pos2 3;
  }
  else
  {
      
//Выходим из цикла
      
break;
  }
}
echo 
"<pre>";
print_r($result);
echo 
"</pre>";

  Ответить  
 
 автор: baston   (17.04.2010 в 08:40)   письмо автору
 
   для: big-trot   (16.04.2010 в 22:26)
 

верно, не найдет. Значит, автору вопроса надо еще подумать над выражением или же воспользоваться стандартными функциями PHP.

  Ответить  
 
 автор: neadekvat   (16.04.2010 в 23:06)   письмо автору
 
   для: big-trot   (16.04.2010 в 22:26)
 

Моих рег.выражений тут нет.

  Ответить  
 
 автор: big-trot   (16.04.2010 в 22:26)   письмо автору
 
   для: neadekvat   (16.04.2010 в 21:38)
 

Интересно, а такую строку ваше выражение найдет?

"start любой e текст end start опять e текст end"

  Ответить  
 
 автор: neadekvat   (16.04.2010 в 21:38)   письмо автору
 
   для: Trianon   (16.04.2010 в 20:11)
 

Все гениальное - просто. Спасибо =)

  Ответить  
 
 автор: Trianon   (16.04.2010 в 20:11)   письмо автору
 
   для: neadekvat   (16.04.2010 в 20:04)
 

Вы попробуйте preg_replace/e на примерах из мануала, постепенно усложняя задачу.
Оно поддастся наверняка. Потом усложните задачу. Еще усложните. Всё будет.
Потом попробуйте инъекцию учинить. :)

  Ответить  
 
 автор: neadekvat   (16.04.2010 в 20:04)   письмо автору
 
   для: Trianon   (16.04.2010 в 19:54)
 

Я тут подумал - а ведь ничего из ваших слов не понял

  Ответить  
 
 автор: Trianon   (16.04.2010 в 19:54)   письмо автору
 
   для: neadekvat   (16.04.2010 в 19:44)
 

Отож
Наивысшая веселость там заключается в том, что тело литерала оторвано от его "кавычного" обрамления.
Ну и еще в том, что областью видимости является функция, из которой выполнен вызов preg_replace.
Что иногда неслабо так спасает.

  Ответить  

Сообщения:  [1-10]    [11-20]  [21-21] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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