У меня проблема с preg_replace, у моей функции есть ошибка, и я не знаю, где. Мне нужно удалить из массива все изображения, у которых есть источник, отличный от моего основного домена.
Это моя функция:
$aPatterns = array (
(...),
'#<img[^>]+src="(?!http://example.com/emoticon/(example|emot|name).gif)[^\s]+"[^>]+>#is',
(...));
$aReplecements = array(
(...),
'',
(...)
);
$contentOut = preg_replace($aPatterns,$aReplecements,$content);
Если тег img не закрыт или не имеет знака двойных кавычек, в конце функции атрибута src не работает, не изменяется пустая строка.
Я не знаю, что в этом выражении не так, надеюсь, и я рассчитываю на вашу помощь.
С Уважением,
Итак, проблема в том, что вы явно указано, что должно быть "
и >
в конце URL - адреса (вы также четко указано, что там должно быть открытие "
в начале URL после src=
так если бы этого не было, это тоже не сработало бы).
Вы можете исправить это поведение, делая "
и >
по желанию, добавляя ?
Знак после них.
#<img[^>]+src="?(?!http://example.com/emoticon/(example|emot|name).gif)[^\s]+"?[^>]+>?#is
Заметьте, я добавил ?
после первого "
в начале рисунка.
Выполнение этого происходит со своими собственными проблемами, например: [^>]
будет соответствовать любому символу, который не является >
поэтому он мог бы соответствовать концу строки, и поэтому вы могли бы потерять всю оставшуюся строку из своего вывода (в зависимости от ваших замен и т.д.)...
Есть ли причина, по которой a >
не будет присутствовать?
<img src="http://exammple.com/emoticon/example.gif">
это работает, но когда у вас есть<img src=http://exammple.com/emoticon/example.gif>
это не работает?