Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Ошибка False notice: lookbehind assertion is not fixed length

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Возникает ошибка при задании сложного шаблона
manking
Отправлено: 17 Июля, 2010 - 03:13:07
Post Id


Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




При использовании функции php preg_replace() вылазит


Warning: preg_replace() [function.preg-replace]: Compilation failed: lookbehind assertion is not fixed length at offset 22 on line 101


В инете на русском про эту ошибку ничего не нашел(((

Вот собственно запрос:


/ (?<=background-image.*)[0-9]+(?=[.]((jpg)|(png)|(gif))) /uix



Он ищет последние цифры в названии файла с расширениями картинок.



например он должен найти здесь 507

background-image:url(../images/фон507.png);



Если убрать первую скобку то все находит, но тогда он любые изображения будет менять
а не от background-image

/ [0-9]+(?=[.]((jpg)|(png)|(gif))) /uix
 
 Top
Champion Супермодератор
Отправлено: 17 Июля, 2010 - 08:20:43
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Утверждения про задние символы должны быть фиксированной длины. В них нельзя использовать вещи типа +, *, {1,234}.
PHP:
скопировать код в буфер обмена
  1.  
  2. $str = 'background-image:url(../images/фон507.png);';
  3. preg_match('/background-image.+?\D(\d+)\.(?:png|jpe?g|gif)/mi', $str, $m);
  4. echo $m[1]
 
 Top
manking
Отправлено: 17 Июля, 2010 - 16:20:05
Post Id


Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




Champion пишет:
Утверждения про задние символы должны быть фиксированной длины. В них нельзя использовать вещи типа +, *, {1,234}.
PHP:
скопировать код в буфер обмена
  1.  
  2. $str = 'background-image:url(../images/фон507.png);';
  3. preg_match('/background-image.+?\D(\d+)\.(?:png|jpe?g|gif)/mi', $str, $m);
  4. echo $m[1]



Спасибо, работает, но тока не очень понятно почему нельзя использовать + * это не очень удобно..
 
 Top
JustUserR
Отправлено: 30 Июля, 2010 - 14:56:07
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




manking пишет:
Но тока не очень понятно почему нельзя использовать + * это не очень удобно..
Операции просмотра вперед и назад ограничивают соответствие шаблонов в том случае если условие просмотра не выполняется - и если бы шаблон просмотра включал в себя варативные квантификаторы то было бы неоднозначно в каком случае засчитывать соответствие Тем не менее в вашем случае можно использовать обычный шаблон с нежадными квантификаторами - сначала вы выполняете поиск background-image и после него вставляете нежадный шаблон типа .*? который будет соответствовать прмежуточным символам до номера картинки


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB