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

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

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

 

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

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

тема: Экранирование кавычек в регулярном выражении
 
 автор: ladan   (12.03.2012 в 22:57)   письмо автору
 
 

Все привет, не могу понять почему не срабатывает условие в шаблоне.
Вообщем нужно заэкранировать все двойные кавычки в тексте и потом найти экранированые кавычки в стилях, прописанные внутри тегов и убрать экранирование. Не спрашивайте зачем мне нужен этот бред :)


<?
$shablon 
= array("/\"/","/style=\\\"(.*)\\\"/iu");
$replace = array("\\\"","style=\"$1\"");
$text "<p>привет \"народ\" <span style=\"color:red;\">как дела?</span></p>
<p>Привет <span style=\"color:green;\">все хорошо!</span></p>"
;

echo 
preg_replace($shablon,$replace,$text);


?>



экранирует все кавычки, но второй шаблон регулярка не находит что ли..

  Ответить  
 
 автор: ladan   (12.03.2012 в 23:12)   письмо автору
 
   для: ladan   (12.03.2012 в 22:57)
 

добавил пару обратных слешей в шаблон и заработало, но некорректно обрабатывает, если уже внутри тега(со стилем) есть другие теги со стилем


<? 
$shablon 
= array("/\"/","/style=\\\\\"(.*)\\\\\"/iu");
$replace = array("\\\"","style=\"$1\"");
$text "<p>привет \"народ\" <span style=\"color:red;\"><span style=\"font-size:15px;\">как дела?</span></span></p>
<p style=\"text-align:center;\">Привет <span style=\"color:green;\">все хорошо!</span></p>"
;

echo 
preg_replace($shablon,$replace,$text);

//выводит

/*
<p>привет \"народ\" <span style="color:red;\"><span style=\"font-size:15px;">как дела?</span></span></p>
<p style="text-align:center;\">Привет <span style=\"color:green;">все хорошо!</span></p>

*/
?>

  Ответить  
 
 автор: Sfinks   (13.03.2012 в 00:48)   письмо автору
 
   для: ladan   (12.03.2012 в 23:12)
 

(.*) => (.*?)

  Ответить  
 
 автор: ladan   (13.03.2012 в 09:01)   письмо автору
 
   для: Sfinks   (13.03.2012 в 00:48)
 

СПАСИБО!! надо запомнить этот прием :)

  Ответить  
 
 автор: ladan   (13.03.2012 в 12:57)   письмо автору
 
   для: Sfinks   (13.03.2012 в 00:48)
 

а как еще можно убрать экранирование в картинках?

<?
/*
<p> \"ясное небо\" <img src=\"http://i024.radikal.ru/1203/7e/a3c322da60c2.jpg\" alt=\"\" width=\"200\" height=\"326\" /></p>
*/
?>



примерно такой код

<?
$shablon 
= array("/(<img)?\\\\\"(>)?/i"); //убирает экранирование везде. Нужно только в теге img
$replace = array("\"");
$text "<p> \\\"ясное небо\\\" <img src=\\\"http://i024.radikal.ru/1203/7e/a3c322da60c2.jpg\\\" alt=\\\"\\\" width=\\\"200\\\" height=\\\"326\\\" /></p>";

echo 
preg_replace($shablon,$replace,$text);
?>


или можно как-то исключение сделать в регулярке, что не нужно заменять в таком-то совпадении?

  Ответить  
 
 автор: Sfinks   (13.03.2012 в 23:33)   письмо автору
 
   для: ladan   (13.03.2012 в 12:57)
 

С исключениями типа "найти где нет", "заменить везде кроме", "не заменять где есть" в РВ туго.
Поэтому подход "от противного" тому что нужно: Найти то что нужно и заменить только там:
<?php
  $s 
'<p> \"ясное небо\" <img src=\"http://i024.radikal.ru/1203/7e/a3c322da60c2.jpg\" alt=\"\" width=\"200\" height=\"326\" /></p>';
  echo 
preg_replace_callback"#<img[^>]*>#si" create_function'$matches' 'return stripslashes($matches[0]);' ) , $s );
?>
как-то так )

  Ответить  
 
 автор: ladan   (14.03.2012 в 08:21)   письмо автору
 
   для: Sfinks   (13.03.2012 в 23:33)
 

Спасибо! Вы как всегда на высоте :)

  Ответить  
Rambler's Top100
вверх

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