Как исключить расширение изображения из строкового места в PHP

Я хочу заменить все строковые значения от example.com до sample.com, за исключением расширения изображения .png, .jpeg, .jpg и т. д.

$body = ' www.example.com, example.com, example.com/hello.html, example.com/logo.png, example.com/yourbaby.php , example.com/newimage.jpg, www.example.com/newimage.jpg';

//values    
$oldomain = ['example.com','www.']; 
$newdomain= ['sample.com', ''];
$excludeextension = [".png", ".jpg", ".jpeg"];

//Replace    
$body = str_replace($olddomain, $newdomain, $body);
$body = str_replace($excludeextension, '', $body);

//output    
 echo $body; 

Выход, который я ищу:

sample.com, sample.com, sample.com/hello.html, example.com/logo.png, sample.com/yourbaby.php , example.com/newimage.jpg, www.example.com/newimage.jpg

Ожидание

https://example.com -> https://sample.com

https://www.example.com -> https://sample.com

https://subdomain.example.com -> https://subdomain.sample.com

https://www.example.com/image.png -> https://www.example.com/image.png

https://example.com/image.png -> https://example.com/image.png

Вы пробовали что-нибудь? Где ты застрял? Мы будем рады помочь, если это необходимо, но это не бесплатная услуга аутсорсинга. Пожалуйста, прочтите Как спросить

ADyson 02.02.2023 16:49

Хороший отступ и макет кода помогут нам прочитать код и, что более важно, помогут вам отладить ваш код Взгляните на стандарт кодирования для вашей собственной выгоды. Вас могут попросить изменить этот код через несколько недель/месяцев, и в конце вы поблагодарите меня.

RiggsFolly 02.02.2023 17:01

@RiggsFolly извините за недоразумение при написании вопроса. Я обновил все с помощью Clear.

Mehul Kumar 02.02.2023 17:47

@MehulKumar Нет необходимости, я думаю, что все недоразумение было моим :)

RiggsFolly 02.02.2023 18:02
Стоит ли изучать 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 и хотите разрабатывать...
2
4
64
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Вы можете сделать это, используя str_replace() и немного взрываясь и взрываясь.

$body = ' www.example.com, example.com, example.com/hello.html, example.com/logo.png, example.com/yourbaby.php, example.com/newimage.jpg, www.example.com/newimage.jpg';

$oldomain = ['example.com','www.']; 
$newdomain= ['sample.com', ''];
$excludeextension = ["png", "jpg", "jpeg"];

$doms = explode(',', $body);
foreach ($doms as &$dom) {
    // get extension
    $pi = pathinfo($dom);
    if ( ! in_array( $pi['extension'], $excludeextension) ){
        $dom = str_replace($oldomain, $newdomain, $dom);
    }

}
$NewStr = implode($doms);
echo $NewStr;

РЕЗУЛЬТАТ

sample.com sample.com sample.com/hello.html example.com/logo.png sample.com/yourbaby.php example.com/newimage.jpg www.example.com/newimage.jpg

Я обновил свой вопрос. Я использую массив, как вы упомянули вчера здесь: stackoverflow.com/a/75311164/20776947. Я попробовал этот ответ с вашим вчерашним ответом, и он выдал ошибку. PHP Parse error: syntax error, unexpected '$excludeextension' (T_VARIABLE)

Mehul Kumar 02.02.2023 17:24

В вашем коде нет ошибки. Но, как и вчера, я сказал, что www.example.com или example.com следует заменить на sample.com. Итак, вы дали мне решение для использования PHP Array. Итак, когда я использую массив, например $oldomain = ['example.com','www.']; и $newdomain= ['sample.com', ''], я получаю сообщение об ошибке. Я также обновил свой вопрос

Mehul Kumar 02.02.2023 17:31

Я пытаюсь объединить ваш this answer и ваш этот ответ https://stackoverflow.com/a/75311164/20776947, и результат (ошибка): 3v4l.org/qpOeU

Mehul Kumar 02.02.2023 17:36

Да, это отлично работает, как и ожидалось. Итак, я могу добавить несколько расширений, таких как css, js и т. д. Еще раз спасибо.

Mehul Kumar 02.02.2023 18:22

Я так думаю, но попробуй

RiggsFolly 02.02.2023 18:28
  1. Использование PATHINFO_EXTENSION и str_replace
  2. Сначала explode, чем implode

$body = 'example.com, www.example.com, https://www.example.com, https://example.com, subdomain.example.com, example.com/logo.png, www.example.com/logo.png, example.com/hello/logo.png, https://example.com/logo.png, subdomain.example.com/logo.png"';

//Defined Values 
$oldomain = ["example.com", "www.example.com"];
$newdomain = "sample.com";
$excludeextension = ["png", "jpg", "jpeg", "css"];

// Split the string into an array of URLs
$urls_body_extension = explode(", ", $body);

// Loop through each URL and replace it if necessary
foreach ($urls_body_extension as &$url_body_extension) {
    $extension_body_extension = pathinfo($url_body_extension, PATHINFO_EXTENSION);
    if (!in_array($extension_body_extension, $excludeextension)) {
        foreach ($oldomain as $domain_body_extension) {
            if (strpos($url_body_extension, $domain_body_extension) !== false) {
                $url_body_extension = str_replace($domain_body_extension, $newdomain, $url_body_extension);
                break;
            }
        }
    }
}

// Join the modified URLs back into a string
$body = implode(", ", $urls_body_extension);

echo $body;

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

Powershell -replace: окружить захваченную группу регулярных выражений знаками доллара, например: $group$
Python: регулярное выражение удаляет подстроку, начиная с определенного символа и заканчивая любым алфавитом
Разделение строки запятой, которой предшествует определенное слово
Сопоставьте несколько одинаковых вхождений после одной конкретной цепочки символов REGEX
Проверьте, присутствует ли число или буква перед определенным символом
Как найти самый длинный непрерывный непрерывный набор символов в строке на основе заданного вектора
Игнорируйте 2 первых символа и выберите 6 символов числа и замените на звездочку * с регулярным выражением
Js регулярное выражение не работает. Точное совпадение и/или операция
Регулярное выражение для соответствия части шестнадцатеричного числа
Как я могу вернуть указатель на первое вхождение регулярного выражения в строке в C?