Поменять местами все URL-адреса веб-сайтов для встраивания через preg_replace()

#php #regex #filter #preg-replace

#php #регулярное выражение #Фильтр #preg-replace

Вопрос:

Я пытаюсь заменить URL-адрес в своем коде другим фрагментом текста.

У меня есть такие URL-адреса

 http://example.com/id/16028
  

Мне нужно заменить все это <h2>Not Allowed</h2> в моем коде фильтров, это выглядит так.

 <a href="http://example.com/id/16028" rel="nofollow">http://example.com/id/16028</a>
  

Итак, этот текст

 Hello here is my link <a href="http://example.com/id/16028" rel="nofollow">http://example.com/id/16028</a>
  

Будет выглядеть так

 Hello here is my link <h2>Not Allowed</h2>
  

Я действительно плохо разбираюсь в регулярных выражениях, вот что у меня есть до сих пор

 function custom_filter($content){
    $rules = array(
        '#<a href="http://(www.)?example.com/([^ ?n/] )((?|/).*?(n|s))?" rel="nofollow">http://(www.)?example.com/([^ ?n/] )((?|/).*?(n|s))?</a>#i' => '<h2>Not Allowed</h2>',
        '#<a (?:.*?)href=["\']href=["\']http[s]?://(?:[^.] .)*example.com/id/([^ ?n/] )((?|/).*?(n|s))["\']#ixs' => '<h2>Not Allowed</h2>'

    );

    foreach ($rules as $link => $player)
        $content = preg_replace($link, $player, $content);


    return $content;

}
  

Пожалуйста, помогите

Я почти справился с этой функцией, но я все еще получаю URL-адреса, а также текст изменения.

 function change_tags($content = ''){
    preg_match_all("/example.com/id/([1-9.-_] )/", $content, $matches);
    foreach ($matches[1] as $key => $value) {
         $content .= '<h2>Not Allowed</h2>';
    }   
    return $content;

}
  

Комментарии:

1. Вы не вносите никаких изменений в $content . Замените $content = preg_replace(...); на $string = preg_replace(...); и посмотрите, поможет ли это.

2. извините, обновлено, это было просто копирование и вставка

Ответ №1:

Я бы выбрал что-то вроде приведенного ниже. Я предполагаю, что вы пытаетесь остановить некоторый спам.

 $spam = 'Your Spam';
$spam = preg_replace( '~<a. ?href="http://example.com/id/[0-9] "[^>]*?>[^<]*?</a>~is', '<h2>Not allowed</h2>', $spam );
  

Это позволит немного разнообразить спам. Вы также можете создать определенный домен:

 $spam = 'Your Spam';
$spam = preg_replace( '~<a. ?href="http://(?:www.)?example.com[^"]*?"[^>]*?>[^<]*?</a>~is', '<h2>Not allowed</h2>', $spam );