|
|
|
| Что значат \ в этих
(.*)\[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 изображения? | |
|
|
|
|
|
|
|
для: Freddie_X
(02.10.2006 в 17:29)
| | Если в тескте нужно найти символ, который в рег. выр-ях являтся
спецсимволом ( ^ $ { [ ...), то перед ним нужно постать обратную косую черту ... " \ "
\1 или $1 - то, что попало в первую скобку
А для того, чтобы заменить все вхождения, можно использовать ф-ю preg_replace_all, только рег выражение придется занести в ограничители ..
preg_replace_all("#(.*)\\[img=(.*)\\](.*)#i","\\2",$message);
|
Возможно, придется изменить жадность рег. выражения: после #i , добавить еще U, т.е. ".*)#iU" | |
|
|
|
|
|
|
|
для: kasmanaft
(02.10.2006 в 18:57)
| | а что значит U?
P.S. выдаёт ошибку: Fatal error: Call to undefined function preg_replace_all() | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: kasmanaft
(02.10.2006 в 20:31)
| | После
$img = preg_match("#(.*)\\[img=(.*)\\](.*)#i","\\2",$message);
|
$img = 0;
Пробовал preg_match, preg_match_all с и без U. | |
|
|
|
|
|
|
|
для: 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 в 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.
Почему так выходит? Объясните, пожалуйста! | |
|
|
|
|
|
|
|
для: 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:22)
| | Ооо, спасибо, Космонафт!!! Помог, дружище!!! =)
А чем отличается preg_match от preg_match_all? | |
|
|
|
|
|
|
|
для: Freddie_X
(02.10.2006 в 22:34)
| | А хз :))
В предыдущем посте написал ... на большее не способен :) | |
|
|
|
|
|
|
|
для: kasmanaft
(02.10.2006 в 22:39)
| | Ясно, ну всё равно спасибо! | |
|
|
|