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
Форумы портала PHP.SU :: Версия для печати :: Ошибка False notice: lookbehind assertion is not fixed length
Форумы портала PHP.SU » PHP » Регулярные выражения » Ошибка False notice: lookbehind assertion is not fixed length

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

1. manking - 17 Июля, 2010 - 03:13:07 - перейти к сообщению
При использовании функции 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
2. Champion - 17 Июля, 2010 - 08:20:43 - перейти к сообщению
Утверждения про задние символы должны быть фиксированной длины. В них нельзя использовать вещи типа +, *, {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]
3. manking - 17 Июля, 2010 - 16:20:05 - перейти к сообщению
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]



Спасибо, работает, но тока не очень понятно почему нельзя использовать + * это не очень удобно..
4. JustUserR - 30 Июля, 2010 - 14:56:07 - перейти к сообщению
manking пишет:
Но тока не очень понятно почему нельзя использовать + * это не очень удобно..
Операции просмотра вперед и назад ограничивают соответствие шаблонов в том случае если условие просмотра не выполняется - и если бы шаблон просмотра включал в себя варативные квантификаторы то было бы неоднозначно в каком случае засчитывать соответствие Тем не менее в вашем случае можно использовать обычный шаблон с нежадными квантификаторами - сначала вы выполняете поиск background-image и после него вставляете нежадный шаблон типа .*? который будет соответствовать прмежуточным символам до номера картинки

 

Powered by ExBB FM 1.0 RC1