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

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

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

 

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

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

тема: Не разобраться с preg_replace()
 
 автор: afoadmin   (11.07.2006 в 09:50)   письмо автору
 
 

Недавно передо мной встала такая задачка заменить
(желательно спомощью регулярных выражений)
обрамляющие html теги сохранив внутри них текст

Пример:

<B>некий текст</B>
заменить на:
<XXX>некий текст</XXX>


Причем по отдельности теги заменять не надо, надо именно так, как в примере.

Может кто-нить знает, как это сделать

   
 
 автор: valenok   (11.07.2006 в 10:33)   письмо автору
 
   для: afoadmin   (11.07.2006 в 09:50)
 

Виджали такой форум " рег. выражения"?

$msg = preg_replace("~\<b>([^]]+)\</b\>~isU", "<xxx> $1 </xxx>", $msg);

   
 
 автор: cheops   (11.07.2006 в 14:04)   письмо автору
 
   для: valenok   (11.07.2006 в 10:33)
 

Ттолько лучше вместо квадратной скобки угловую
<?php
  $msg 
preg_replace("~<b>([^>]+)\</b\>~isU""<xxx> $1 </xxx>"$msg);
?>

а можно даже так
<?php
  $msg 
preg_replace("~<b>(.+)\</b\>~isU""<xxx> $1 </xxx>"$msg);
?>

так как всё равно используется модификатор U.

   
 
 автор: valenok   (11.07.2006 в 14:34)   письмо автору
 
   для: cheops   (11.07.2006 в 14:04)
 

Я прсто чесно стянул ваш код из какойто темы..

   
 
 автор: cheops   (11.07.2006 в 14:39)   письмо автору
 
   для: valenok   (11.07.2006 в 14:34)
 

([^]]+) обычно применяются если тэги в квадратных скобках, т.е. что-то вроде [tag] и [/tag] для угловых скобок <tag> и </tag> стараются применять ([^>]+) или (.+), если внутрь тэгов входят другие тэги. В принципе ([^]]+) тоже покатит, особенно если квадратные скобки не входят в название, но это немного будет смущать других людей, которые будут разбирать логику регулярного выражения.

   
 
 автор: afoadmin   (11.07.2006 в 18:18)   письмо автору
 
   для: cheops   (11.07.2006 в 14:39)
 


$msg = preg_replace("~<b>(.+)\</b\>~isU", "<xxx> $1 </xxx>", $msg); 


Подскажите зачем перед скобками второго \</b\> косые черты, или тогда почему нет обратных слешей перед первым <b>

   
 
 автор: cheops   (11.07.2006 в 22:30)   письмо автору
 
   для: afoadmin   (11.07.2006 в 18:18)
 

Собственно их можно убрать, так как \< и < - одно и тоже (для спец-симолов это не так, там экранирование имеет значение).

   
 
 автор: afoadmin   (12.07.2006 в 15:51)   письмо автору
 
   для: cheops   (11.07.2006 в 22:30)
 

Еще один каверзный вопрос.... Чем принцыпиально отличается это

$msg = preg_replace("~<b>(.+)</b>~isU", "<xxx> $1 </xxx>", $msg);

от вот этого

$msg = preg_replace("#<b>(.+)</b>#isU", "<xxx> \\1 </xxx>", $msg);

#  и  ~
$1  и  \\1



Работает вроде одинаково

   
 
 автор: cheops   (13.07.2006 в 00:50)   письмо автору
 
   для: afoadmin   (12.07.2006 в 15:51)
 

Эти регулярные выражения абсолютно одинаковы, дело в том, что # и ~ здесь выступают как границы регулярных выражений, чтобы указать где заканчивается регулярное выражение <b>(.+)</b> и начинаются модификаторы isU.

   
Rambler's Top100
вверх

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