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

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

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

 

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

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

тема: выбрать все адреса картинок
 
 автор: t3ma   (17.11.2009 в 15:21)   письмо автору
 
 

пытаюсь выбрать адреса всех картинок, но не совсем получается

<?php
$text 
'<img src="/images/diamond.gif">
<img src="/images/spade.gif">
<img src="/images/heart.gif">
<img src="http://img109.imageshack.us/img109/2109/statbi.jpg">'
;

 
$pattern '#img src=([^\s]+)\s#'
        
preg_match_all($pattern$text$out); 

?>


в итоге нужно чтобы было
/images/diamond.gif
/images/spade.gif
/images/heart.gif
http://img109.imageshack.us/img109/2109/statbi.jpg

помогите пожалуйста

  Ответить  
 
 автор: duv   (17.11.2009 в 16:32)
 
   для: t3ma   (17.11.2009 в 15:21)
 

 $pattern='/["]([^"]+)["]/'; 

  Ответить  
 
 автор: cheops   (17.11.2009 в 16:35)   письмо автору
 
   для: t3ma   (17.11.2009 в 15:21)
 

А адрес всегда в двойные кавычки заключен? Если да, то можно использовать следующее регулярное выражение
<?php 
$text 
'<img src="/images/diamond.gif"> 
<img src="/images/spade.gif"> 
<img src="/images/heart.gif"> 
<img src="http://img109.imageshack.us/img109/2109/statbi.jpg">'


$pattern '#img src=\"([^\"]+)\"#';  
preg_match_all($pattern$text$out);  
echo 
"<pre>";
print_r($out[1]);
echo 
"</pre>";
?>

  Ответить  
 
 автор: t3ma   (17.11.2009 в 18:30)   письмо автору
 
   для: cheops   (17.11.2009 в 16:35)
 

спасибо большое

а как потом этот массив использовать ?

делаю так: неполучается
почему-то всегда ставится строка <img style="cursor:pointer;" rel=lightbox-tour width=600 height=450
даже если картинка меньше 700*1200.


<?php
$text 
'<img src="/images/diamond.gif"> 
<img src="/images/spade.gif"> 
<img src="/images/heart.gif"> 
<img src="http://img109.imageshack.us/img109/2109/statbi.jpg">'
;

 
$pattern '#img src=\"([^\"]+)\"#'
        
preg_match_all($pattern$text$out); 


foreach (
$out[1] as $value) {

$size getimagesize($value);

          if (
$size[0] >= 700 or $size[0] >= 1200) {
              
$text str_replace('<img''<img style="cursor:pointer;" rel=lightbox-tour width=600 height=450'$text); 
          } else {
          
$text str_replace('<img''<img style="cursor:pointer;" rel=lightbox-tour'$text);
          }
}

echo 
$text;
?>

  Ответить  
 
 автор: duv   (17.11.2009 в 20:20)
 
   для: t3ma   (17.11.2009 в 18:30)
 

Может быть,строка
  if ($size[0] >= 700 or $size[0] >= 1200) 
,
должна выглядеть так:
  if ($size[1] >= 700 or $size[0] >= 1200) 

?

  Ответить  
 
 автор: t3ma   (17.11.2009 в 21:15)   письмо автору
 
   для: duv   (17.11.2009 в 20:20)
 

да, конечно
вот так
if ($size[0] >= 700 or $size[1] >= 1200) 

но это сути дела не меняет.. ) таже проблема :(

  Ответить  
 
 автор: ....   (17.11.2009 в 22:34)
 
   для: t3ma   (17.11.2009 в 21:15)
 

> $text = str_replace('<img', '<img style="cursor:pointer;" rel=lightbox-tour', $text);

с такими заменами во всём тексте столько раз сколько там картинок
У Вас ещё не плохо получилось :)

наверное потомучто если путь к файлу не начинается с http:// то он воспринимается как путь в файловой системе , а там / это корень диска, а не корень сайта

  Ответить  
 
 автор: t3ma   (18.11.2009 в 09:52)   письмо автору
 
   для: ....   (17.11.2009 в 22:34)
 

дело тоже не в этом :(

проверьте сами вот код:


<?php
$text 
'<img src="http://weaktight.com/img/d5/hQ.gif"> 
<img src="http://weaktight.com/img/d5/sA.gif"> 
<img src="http://weaktight.com/img/d5/dJ.gif"> 
<img src="http://img109.imageshack.us/img109/2109/statbi.jpg">'
;

 
$pattern '#img src=\"([^\"]+)\"#'
        
preg_match_all($pattern$text$out); 


foreach (
$out[1] as $value) {

$size getimagesize($value);

          if (
$size[0] >= 700 or $size[1] >= 1200) {
              
$text str_replace('<img''<img style="cursor:pointer;" rel=lightbox-tour width=600 height=450'$text); 
          } else {
          
$text str_replace('<img''<img style="cursor:pointer;" rel=lightbox-tour'$text);
          }
}

echo 
$text;
?>

  Ответить  
 
 автор: ....   (18.11.2009 в 11:21)
 
   для: t3ma   (18.11.2009 в 09:52)
 

Вам нужна preg_replace_callback();

получится похоже на это

<?
function cb_f($match) {
 
$size getimagesize($match[1]);
 return 
'<img style="border:solid 5px red; width:'
     
$size[0] .'px; height:' .$size[1] . 'px;" src="' $match[1] . '"/>';
}
echo 
$txt preg_replace_callback('#<img[^>]+?\bsrc=[\'"]?([^\s>\'"]+)[^>]*?>#''cb_f'$txt);

и это упрощённо, не проверяется начинается-ли адрес с \
, нет этого 700 or $size[1] >= 1200
и вообще не проверял есть-ли ошибки

думаю очень медленно это всё будет работать учитывая подзапросы
а так можно просто задать в стилях max-width и max-height
, только не все браузеры могут это поддерживать

  Ответить  
 
 автор: duv   (18.11.2009 в 17:14)   письмо автору
 
   для: ....   (18.11.2009 в 11:21)
 

Попробуйте так:

<?php 
 $text 
= array('<img src="http://weaktight.com/img/d5/hQ.gif">',
'<img src="http://weaktight.com/img/d5/sA.gif">',
'<img src="http://weaktight.com/img/d5/dJ.gif">',
'<img src="http://img109.imageshack.us/img109/2109/statbi.jpg">');

$pattern '#img src=\"([^\"]+)\"#';

for(
$i=0;$i<count($text);$i++)
{
    if(
preg_match($pattern$text[$i], $out))
    {
$size getimagesize($out[1]);
    if (
$size[0] >= 700 or $size[1] >= 1200)
    
$text[$i] = str_replace('<img''<img style="cursor:pointer;" rel=lightbox-tour width=600 height=450'$text[$i]);
    else
    
$text[$i] = str_replace('<img''<img style="cursor:pointer;" rel=lightbox-tour'$text[$i]);
    }
}
echo 
implode(","$text); 
?>

  Ответить  
 
 автор: t3ma   (18.11.2009 в 18:37)   письмо автору
 
   для: duv   (18.11.2009 в 17:14)
 

так к сожалению не подойдет так как $text содержит не только ссылки но и различныt другие символы

  Ответить  
 
 автор: t3ma   (18.11.2009 в 18:35)   письмо автору
 
   для: ....   (18.11.2009 в 11:21)
 

огромное спасибо

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

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