#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 );