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

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

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

 

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

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

тема: Подскажите про регулярные выражения!
 
 автор: Freddie_X   (02.10.2006 в 17:29)   письмо автору
 
 

Что значат \ в этих

 (.*)\[url\](.*)\[/url\](.*)
\1<a href=\"\2\">\2</a>\3

регулярных выражениях?

И чтобы не создавать новую тему, скажите, пожалуйста, насчёт этого вопроса:
Я с помощью этого
<?php
$message 
"text[img=http://www.mysite.ru/image1.gif] text [img=http://www.mysite.ru/image2.gif]";
$img eregi_replace("(.*)\\[img=(.*)\\](.*)","\\2",$message);
$imgsize getimagesize($img);
if(
$imgsize[0]>="300") { echo "Больше 300"$a 300; } else { echo "Меньше 300"$a $imgsize[0]; }
$imgrepl "\\1<img src='\\2' border='0' width='".$a."'>\\3";
$message eregi_replace("(.*)\\[img=(.*)\\](.*)",$imgrepl,$message);
echo 
$message;
?>

Заменяю текст на картинку. Но если в сообщении более 1 картинки, то eregi_replace() находит только последнюю, и потом заменяет всё как нужно.
Как сделать, чтобы можно было добавить больше 1 изображения?

   
 
 автор: kasmanaft   (02.10.2006 в 18:57)   письмо автору
 
   для: Freddie_X   (02.10.2006 в 17:29)
 

Если в тескте нужно найти символ, который в рег. выр-ях являтся
спецсимволом ( ^ $ { [ ...), то перед ним нужно постать обратную косую черту ... " \ "

\1 или $1 - то, что попало в первую скобку

А для того, чтобы заменить все вхождения, можно использовать ф-ю preg_replace_all, только рег выражение придется занести в ограничители ..

preg_replace_all("#(.*)\\[img=(.*)\\](.*)#i","\\2",$message);

Возможно, придется изменить жадность рег. выражения: после #i , добавить еще U, т.е. ".*)#iU"

   
 
 автор: Freddie_X   (02.10.2006 в 19:30)   письмо автору
 
   для: kasmanaft   (02.10.2006 в 18:57)
 

а что значит U?
P.S. выдаёт ошибку: Fatal error: Call to undefined function preg_replace_all()

   
 
 автор: kasmanaft   (02.10.2006 в 20:31)   письмо автору
 
   для: Freddie_X   (02.10.2006 в 19:30)
 

Хе-хе ... спутал с preg_match_all :)
Попробуйте просто preg_replace .. с U и без него ...
Если работать не будет, тогда примеры plz, где и что не работает...

U - модификатор жадности, вот сюда можно сходить почитать
http://www.softtime.ru/forum/read.php?id_forum=6&id_theme=24969&page=1

   
 
 автор: Freddie_X   (02.10.2006 в 21:02)   письмо автору
 
   для: kasmanaft   (02.10.2006 в 20:31)
 

После

$img = preg_match("#(.*)\\[img=(.*)\\](.*)#i","\\2",$message);

$img = 0;
Пробовал preg_match, preg_match_all с и без U.

   
 
 автор: kasmanaft   (02.10.2006 в 21:42)   письмо автору
 
   для: Freddie_X   (02.10.2006 в 21:02)
 

preg_match_all - это я перепутал .. нужен preg_replace ...
вот попробуйте:

<?php
$message 
"text[img=http://www.mysite.ru/image1.gif] text [img=http://www.mysite.ru/image2.gif]";
preg_match_all ("#\[img=(.*)\]#iU",$message$images);
if (
count($images[1] > 0))
{
     foreach (
$images[1] as $key => $val)
     {
          
$imgsize getimagesize($val);
          if(
$imgsize[0]>="300") { echo "Больше 300"$a 300; } else { echo "Меньше 300"$a $imgsize[0]; }
          
$imgrepl "<img src='\\1' border='0' width='$a'>";
          
$message preg_replace("#\[img=(.*?)\]#i",$imgrepl,$message,1);
     }
}
echo 
$message;
?>

   
 
 автор: Freddie_X   (02.10.2006 в 22:22)   письмо автору
 
   для: Freddie_X   (02.10.2006 в 21:02)
 

Кое-что прочитал про preg_match.
Все найденные совпадения можно поместить в массив.
Используя

preg_match("#\\[img=(.*)\\]#iU",$message,$matches);

в элементе переменной $matches[0] строка: [img=http://www.mysite.ru/image1.gif], а в $matches[1] - http://www.mysite.ru/image1.gif.
Почему так выходит? Объясните, пожалуйста!

   
 
 автор: kasmanaft   (02.10.2006 в 22:34)   письмо автору
 
   для: Freddie_X   (02.10.2006 в 22:22)
 

В $matches[0] заносится строка, попавшая под рег выражение ..
а в следующие $matches[1], $matches[2] и т.д. заносится то, что из $matches[0] попало в скобки: *[1] - первая скобка, *[2] - вторая скобка ..

Под выражение попала одна картинка потому, что preg_match всю строку сравнивает с рег выражением, а не ищет участки подходящие из нее ...
Можно использовать preg_match_all - она осущ. глобальный поиск, то что и нужно

   
 
 автор: Freddie_X   (02.10.2006 в 22:34)   письмо автору
 
   для: Freddie_X   (02.10.2006 в 22:22)
 

Ооо, спасибо, Космонафт!!! Помог, дружище!!! =)
А чем отличается preg_match от preg_match_all?

   
 
 автор: kasmanaft   (02.10.2006 в 22:39)   письмо автору
 
   для: Freddie_X   (02.10.2006 в 22:34)
 

А хз :))
В предыдущем посте написал ... на большее не способен :)

   
 
 автор: Freddie_X   (02.10.2006 в 22:53)   письмо автору
 
   для: kasmanaft   (02.10.2006 в 22:39)
 

Ясно, ну всё равно спасибо!

   
Rambler's Top100
вверх

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