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

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

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

 

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

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

тема: Помогите исправить ошибку
 
 автор: kosta_in_net   (05.01.2012 в 16:27)   письмо автору
 
 

Нужно переделать большое количество изображений. ПХП-скрипт для обработки есть. Но очень не хочется вручную ему подавать адреса рисунков (много - долго). Выдернул рисунки из кода примерно в таком виде:
img src="/images/misc/prescription-120.jpg" height="120" width="120" class="product" alt="" /
Впринципе, проблема как-бы решается в таком виде:
preg_match('/\ssrc\s*=\s*"([^"]*)/', $params,$matches);

но в выражении не учитывается, что вместо двойных кавычек могут использоваться одинарные. Попытался сделать выражение универсальным:
preg_match('/\ssrc\s*=\s*("|\')([^\1]*)/', $params,$matches);

(использовал обратную ссылку)
но результат получился:
/images/misc/prescription-120.jpg" height="120" width="120" class="product" alt="" /
неправильным.
Я понимаю, что можно сделать так:
preg_match('/\ssrc\s*=\s*["|\']([^("|\')]*)/', $params,$matches);

Но хотелось бы разобраться с обратной ссылкой. В чем проблема? Почему не работает
preg_match('/\ssrc\s*=\s*("|\')([^\1]*)/', $params,$matches);

?

  Ответить  
 
 автор: ........   (05.01.2012 в 23:50)
 
   для: kosta_in_net   (05.01.2012 в 16:27)
 

>[^\1]
из-за этого


типа такого например работает
<pre><?php
$txt 
'
img width="120" src="/images/misc/jpg" /
img src=\'/images/misc\\\'/jpg\' /'
.............;
$re '#\bsrc\s*=\s*([\'"])((?:(?!\1)\x5c?.)*)\1#is';
preg_match_all($re$txt$o);
var_export($o);
var_dump($o);

  Ответить  
 
 автор: .........   (06.01.2012 в 00:04)
 
   для: ........   (05.01.2012 в 23:50)
 

точнее $re = '#\bsrc\s*=\s*([\'"])((?>(?!\1)\x5c?.)*)\1#is';

// не туда вставил ...........)) извиняюсь

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

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