Preg_replace для определенного iframe

Написание быстрого плагина для удаления ссылок на Amazon из электронных писем и фидов, чтобы не нарушать условия обслуживания. Разобрался со всем, кроме iframe.

Типичная связанная ссылка iframe выглядит следующим образом

 <iframe style = "width:120px;height:240px;" marginwidth = "0" marginheight = "0" scrolling = "no" frameborder = "0" src = "//ws-eu.amazon-adsystem.com/widgets/q?ServiceVersion=20070822&OneJS=1&Operation=GetAdHtml&MarketPlace=GB&source=ac&ref=qf_sp_asin_til&ad_type=product_link&tracking_id=keepchickens-21&marketplace=amazon&region=GB&placement=1473689309&asins=1473689309&linkId=2ee7072c3050c40cded9c2ecdb317332&show_border=true&link_opens_in_new_window=true&price_color=333333&title_color=0066c0&bg_color=ffffff">
</iframe> 

Это регулярное выражение

/(<iframe )(.*)(amazon.adsystem.com).*/

подбирает все, кроме закрывающего тега iframe Я пробовал варианты

/(<iframe )(.*)(amazon.adsystem.com).*(</iframe>)/

Но не могу заставить его работать. Есть идеи?

Насколько ваш ~(<iframe )(.*?)(amazon\.adsystem\.com).*?(</iframe>)~ совпадает с ответом, который я принял (<iframe)([\s\S ]*?)(amazon.adsystem.com)([\s\S]*?)(</iframe‌​>) ?

andymoyle 20.06.2019 21:49

Понятно, вот что я имел в виду: 3v4l.org/79CF6. Я думал, что литеральная строка является частью URL-адреса. Тем не менее, буквальная точка должна быть экранирована, и ваша единственная проблема заключается в том, что . не соответствует новой строке по умолчанию, и как заставить ее работать между строками — очень известная проблема, поэтому закрыть как дубликат.

Wiktor Stribiżew 21.06.2019 00:03

Теперь я понимаю - новичок в regEx и не знал, что проблема в новой строке. Спасибо

andymoyle 21.06.2019 08:21
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
3
48
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мы можем захотеть передать здесь символы новой строки с выражением, подобным следующему:

(<iframe)([\s\S]*?)(amazon.adsystem.com)([\s\S]*?)(</iframe>)

Демо

Тестовое задание

$re = '/(<iframe)([\s\S]*?)(amazon.adsystem.com)([\s\S]*?)(</iframe>)/m';
$str = '<iframe style = "width:120px;height:240px;" marginwidth = "0" marginheight = "0" scrolling = "no" frameborder = "0" src = "//ws-eu.amazon-adsystem.com/widgets/q?ServiceVersion=20070822&OneJS=1&Operation=GetAdHtml&MarketPlace=GB&source=ac&ref=qf_sp_asin_til&ad_type=product_link&tracking_id=keepchickens-21&marketplace=amazon&region=GB&placement=1473689309&asins=1473689309&linkId=2ee7072c3050c40cded9c2ecdb317332&show_border=true&link_opens_in_new_window=true&price_color=333333&title_color=0066c0&bg_color=ffffff">
</iframe> some other text <iframe style = "width:120px;height:240px;" marginwidth = "0" marginheight = "0" scrolling = "no" frameborder = "0" src = "//ws-eu.amazon-adsystem.com/widgets/q?ServiceVersion=20070822&OneJS=1&Operation=GetAdHtml&MarketPlace=GB&source=ac&ref=qf_sp_asin_til&ad_type=product_link&tracking_id=keepchickens-21&marketplace=amazon&region=GB&placement=1473689309&asins=1473689309&linkId=2ee7072c3050c40cded9c2ecdb317332&show_border=true&link_opens_in_new_window=true&price_color=333333&title_color=0066c0&bg_color=ffffff">
</iframe> ';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

// Print the entire match result
var_dump($matches);

Выход

array(2) {
  [0]=>
  array(6) {
    [0]=>
    string(513) "<iframe style = "width:120px;height:240px;" marginwidth = "0" marginheight = "0" scrolling = "no" frameborder = "0" src = "//ws-eu.amazon-adsystem.com/widgets/q?ServiceVersion=20070822&OneJS=1&Operation=GetAdHtml&MarketPlace=GB&source=ac&ref=qf_sp_asin_til&ad_type=product_link&tracking_id=keepchickens-21&marketplace=amazon&region=GB&placement=1473689309&asins=1473689309&linkId=2ee7072c3050c40cded9c2ecdb317332&show_border=true&link_opens_in_new_window=true&price_color=333333&title_color=0066c0&bg_color=ffffff">
</iframe>"
    [1]=>
    string(7) "<iframe"
    [2]=>
    string(112) " style = "width:120px;height:240px;" marginwidth = "0" marginheight = "0" scrolling = "no" frameborder = "0" src = "//ws-eu."
    [3]=>
    string(19) "amazon-adsystem.com"
    [4]=>
    string(366) "/widgets/q?ServiceVersion=20070822&OneJS=1&Operation=GetAdHtml&MarketPlace=GB&source=ac&ref=qf_sp_asin_til&ad_type=product_link&tracking_id=keepchickens-21&marketplace=amazon&region=GB&placement=1473689309&asins=1473689309&linkId=2ee7072c3050c40cded9c2ecdb317332&show_border=true&link_opens_in_new_window=true&price_color=333333&title_color=0066c0&bg_color=ffffff">
"
    [5]=>
    string(9) "</iframe>"
  }
  [1]=>
  array(6) {
    [0]=>
    string(513) "<iframe style = "width:120px;height:240px;" marginwidth = "0" marginheight = "0" scrolling = "no" frameborder = "0" src = "//ws-eu.amazon-adsystem.com/widgets/q?ServiceVersion=20070822&OneJS=1&Operation=GetAdHtml&MarketPlace=GB&source=ac&ref=qf_sp_asin_til&ad_type=product_link&tracking_id=keepchickens-21&marketplace=amazon&region=GB&placement=1473689309&asins=1473689309&linkId=2ee7072c3050c40cded9c2ecdb317332&show_border=true&link_opens_in_new_window=true&price_color=333333&title_color=0066c0&bg_color=ffffff">
</iframe>"
    [1]=>
    string(7) "<iframe"
    [2]=>
    string(112) " style = "width:120px;height:240px;" marginwidth = "0" marginheight = "0" scrolling = "no" frameborder = "0" src = "//ws-eu."
    [3]=>
    string(19) "amazon-adsystem.com"
    [4]=>
    string(366) "/widgets/q?ServiceVersion=20070822&OneJS=1&Operation=GetAdHtml&MarketPlace=GB&source=ac&ref=qf_sp_asin_til&ad_type=product_link&tracking_id=keepchickens-21&marketplace=amazon&region=GB&placement=1473689309&asins=1473689309&linkId=2ee7072c3050c40cded9c2ecdb317332&show_border=true&link_opens_in_new_window=true&price_color=333333&title_color=0066c0&bg_color=ffffff">
"
    [5]=>
    string(9) "</iframe>"
  }

Пожалуйста, прекратите повторно открывать очевидные повторяющиеся вопросы. Они не несут никакой дополнительной ценности для сайта. Хотя бы оставляйте комментарии, почему вы считаете тот или иной вопрос не дурачком.

Wiktor Stribiżew 20.06.2019 18:59

Пожалуйста, также прочитайте в вашей демо-ссылке (и комментарии Виктора под вопросом) о том, почему ваш шаблон не является чем-то, что люди должны копировать и вставлять.

mickmackusa 20.06.2019 21:32

Другие вопросы по теме