Регулярные выражения, помогите создать правило исключения

PitBult

Новичок
Регулярные выражения, помогите создать правило исключения

Доброго времени суток!
Давно не пользовался помощью на форумах, т.к. не было нужды, а сейчас вот ищу поддержку от ГУРУ по регулярным выражениям.

Задача стоит такая:

у меня есть текст:
asdads <img obj="course_1_2_3" class="30" border="10" sort="4"> dsf sdf sdf

Мне необходимо заменить его на:
asdads $this->set_object("course", 1, 2, 3, "4") dsf sdf sdf

Вот собственно регулярное выражение:
PHP:
$content = preg_replace('/<img.*obj="([A-Z_a-z]*)_([0-9]*)_([0-9]*)_([a-zA-Z0-9]*)".*sort="([0-9]+)"[^>]*>/Ue', '$this->set_object("\\1", \\2, \\3, \\4, "\\5")', $content);
Все работает, только одна проблема. Как мне дописать регулярное выражение, чтобы если в теге IMG нет атрибута sort="4", подставлялось 0 или пустое значение???

Спасибо, думаю многим будет полезно это узнать. Пытался поработать с "|" и скобками, но все безуспешно. :confused:
 

Страшный Злодей

Бывший член клуба (достало хамство).
ну так возьмите его в скобки, и дальше обработайте как обычный элемент массива...

sort="4" - должно находится ноль или один раз...
 

3ton

Новичок
Учись студент!

PHP:
$content = preg_replace('/<img.*obj="([A-Z_a-z]*)_([0-9]*)_([0-9]*)_([a-zA-Z0-9]*)"(?:(?:.*sort="([0-9]+)"[^>]*>)|(?:[^>]*>))/Ue', '$this->set_object("\\1", \\2, \\3, \\4, "\\5")', $content);
или так

PHP:
$content = preg_replace('/<img.*obj="([A-Z_a-z]*)_([0-9]*)_([0-9]*)_([a-zA-Z0-9]*)"(?:.*sort="([0-9]+)")?[^>]*>/Ue', '$this->set_object("\\1", \\2, \\3, \\4, "\\5")', $content);

зубри матчасть!
 

PitBult

Новичок
Спасибо 3ton, не знал , что возможно использование комбинации (?: )
 

3ton

Новичок
а если не знаешь в каком порядке все это будет - юзай



PHP:
$content = preg_replace('/<img(?:.*sort="([0-9]+)")?(?:.*obj="([A-Z_a-z]*)_([0-9]*)_([0-9]*)_([a-zA-Z0-9]*)")(?:.*sort="([0-9]+)")?[^>]*>/Ue', '$this->set_object("\\2", \\3, \\4, \\5, "\\1\\6")', $content);
 
Сверху