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 :: Версия для печати :: выражение работает немножно не так, как ожидалось
Форумы портала PHP.SU » PHP » Регулярные выражения » выражение работает немножно не так, как ожидалось

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

1. cic - 31 Октября, 2014 - 17:24:34 - перейти к сообщению
Распознает картинки, должен выделять в $8 (или восьмой пункт массива) адрес картинки (всё равно относительный или абсолютный)
CODE (text):
скопировать код в буфер обмена
  1. (<img)[ ]{1,9}(src)([ ]{1,9}|)(=)([ ]|)([",']|)(http://|/)(.*)([",', ])(.*)>


Почему то из строки:
CODE (text):
скопировать код в буфер обмена
  1. <img src = "http://my.ru/img/1.jpg" alt="Ура!">

получается
CODE (text):
скопировать код в буфер обмена
  1. my.ru/img/1.jpg" alt="Ура!
вместо ожидаемого
CODE (text):
скопировать код в буфер обмена
  1. my.ru/img/1.jpg

а из
CODE (text):
скопировать код в буфер обмена
  1. <img src="/img/1.jpg" alt="Ура!">

CODE (text):
скопировать код в буфер обмена
  1. img/1.jpg" alt="Ура!
вместо ожидаемого
CODE (text):
скопировать код в буфер обмена
  1. img/1.jpg
2. dXdYdZ - 31 Октября, 2014 - 20:57:30 - перейти к сообщению
Почитайте про жадность в регулярных выражениях.
3. cic - 03 Ноября, 2014 - 14:07:34 - перейти к сообщению
собсна кому интересно, вот так работает
CODE (htmlphp):
скопировать код в буфер обмена
  1. (<img)\s{1,9}(src)(\s{1,9}|)(=)(\s{1,9}|)([",']|)(http://|/)([\w./\[\]=]+)([",',\s])(.*)>


но участок [\w./\[\]=]+ мне не нравится, там ведь могут быть и другие символы в адресе. Поэтому упрощу вопрос, нужно выражение "любые символы, кроме (",',\s)"
4. IllusionMH - 03 Ноября, 2014 - 14:20:59 - перейти к сообщению
cic, [^список_исключений]
5. cic - 03 Ноября, 2014 - 15:53:08 - перейти к сообщению
так не работает
6. dXdYdZ - 03 Ноября, 2014 - 20:52:19 - перейти к сообщению
Я ж говорю, почитайте про жадность. Вот так работает:
CODE (htmlphp):
скопировать код в буфер обмена
  1. (<img)[ ]{1,9}(src)([ ]{1,9}|)(=)([ ]|)([",']|)(http://|/)(.*?)([",', ])(.*)>

Достаточно убрать жадность при поиске подстроки адреса картинки.
7. cic - 04 Ноября, 2014 - 09:29:03 - перейти к сообщению
IllusionMH пишет:
cic, [^список_исключений]

Извините, работает, только результат тогда будет в $9, я там начало переделал

 

Powered by ExBB FM 1.0 RC1