Помогите упростить регул. выражение

Rus

Guest
Помогите упростить регул. выражение

"/<(img|Img|IMg|IMG|iMG|imG|ImG|iMg)([^(Ss).]+)(src|Src|SRc|SRC|sRC|srC|sRc)=[\'\"]*([a-zA-Z0-9_\-\.\/\:]+)([^>.]*>)/"

Это выражение ищет теги <img ...> в тексте. Так как мне нужен был url да еще preg_replace_callback чувствителен к регистру, то пришлось вот так извращаться. Это выражение находит теги следующих видов:
<img atl=xxx src=url>
<img src=url alt=xxx>
<img Src=url>
<Img src=url>
и т.д.

Можно ли его упростить?
 

Rus

Guest
Ага, согласен выглядит страшно. Хочу узнать может можно легче
 

Rus

Guest
Я это читал уже! Пожалуйста покажи конкретное выражение для этого случая
 

SiMM

Новичок
> Я это читал уже!
Читай ещё.
[m]reference.pcre.pattern.modifiers[/m]
 

Rus

Guest
>i (PCRE_CASELESS)
>
>Если этот модификатор используется, символы в шаблоне соответствуют >символам как верхнего, так и нижнего регистра.

Возможно это уже глупый вопрос, но не получается у меня его использовать!
 

SiMM

Новичок
> Возможно это уже глупый вопрос, но не получается у меня его использовать!
Это не глупый вопрос - это бессмысленная игра слов. Здесь нет телепатов, поэтому поставить точный диагноз врядли кто сможет - разве что наугад.
Неполучается - показывай, как делал. Может опять же невнимательно читал ман и модификатор ставил не туда, куда следует.
 

Rus

Guest
Сократил уже до этого - "/<(?i)img([^s.]+)src=[\'\"]*([a-zA-Z0-9_\-\.\/\:]+)([^>.]*>)/"
Думаю теперь только ([a-zA-Z0-9_\-\.\/\:]+) заменить
\w - это a-zA-Z ?
\d - 0-9 ?
тоесть должно быть так - ([\w\d_\-\.\/\:]+)? Это выражение должно соответствовать URL. Пример http://site-s.com/
 

Фанат

oncle terrible
Команда форума
Rus
тебе уже 20 раз давали ссылку. неужели трудно САМОМУ посмотреть, чему соответствует \w?!
 

Rus

Guest
\w - все что образовывает слова. Я решил на всякий случай переспросить.. вообще можно было просто сказать правильно или нет.

В конце концов у меня вышло "/<(?i)img([^s.]+)src=[\'\"]*([\w\d_\-\.\/\:]+)[\'\"]*([^>.]*>)/"
Надеюсь это правильно (я проверил, но мало ли). Всем спасибо
 

SiMM

Новичок
Вообще модификаторы можно ставить в конце.
"/<img([^s.]+)src=[\'\"]*([\w\d_\-\.\/\:]+)[\'\"]*([^>.]*> )/i"
Это так, чтобы знал... да и модификатор s, думаю, тебе не помешает.
 

Фанат

oncle terrible
Команда форума
"word" символ - это произвольная цифра, буква или символ подчеркивания, проще говоря, любой символ, который может являться частью 'слова' в Perl.
Так что, если бы ты разул глаза, и видел не фигу в книге, а е1 текст, то мог бы упростить ещё больше. ([\w\d_\-\.\/\:]+) до (\w+)
 

SiMM

Новичок
модификатор
Copy&Paste делал, как было и в оригинале.
SelenIT, ну, судя по всему, кроме s и точки :)
Rus, косяк у тебя.
 

SelenIT

IT-лунатик :)
SiMM, видимо, кроме s, S и точки (с учетом PCRE_CASELESS) :)

Фанат, по-моему, знаки препинания и дефис все-таки не накрываются классом \w.

P.S. Самому любопытно стало, вот мой вариант решения: '!<img[^>]+src=([\'"]?)([\w\-/.:~]+)\1[^>]*>!is'
 
Сверху