Вопрос:
У меня есть много строк (твиттер-твитов), из которых я хотел бы удалить ссылки, когда я их эхо.
У меня нет контроля над строкой, и хотя все ссылки начинаются с http, они могут заканчиваться символом “/” или “;” нет, и им следует следовать или нет.
Кроме того, иногда между связующим звеном и словом перед ним нет места.
Один пример такой строки:
The Third Culture: The Frontline of Global Thinkinghttp://is.gd/qFioda;via @edge
Я пытаюсь поиграть с preg_replace, но не смог найти решение, соответствующее всем исключениям:
<?php echo preg_replace(«/http[^)]+;/»,»»,$feed->itemTitle); ?>
Любая идея, как я должен действовать?
Изменить: я пробовал
<?php echo preg_replace(‘@(https?://([-w.]+[-w])+(:d+)?(/([w/_.#-]*(?S+)?[^.s])?)?)@’, ‘ ‘, $feed->itemTitle); ?>
но все равно не удастся.
Изменить 2: я нашел это:
<?php echo preg_replace(‘^(ht|f)tp(s?)://[0-9a-zA-Z]([-.w]*[0-9a-zA-Z])*(:(0-9)*)*(/?)([a-zA-Z0-9-.?,’/\+&%$#_]*)?$^’,’ ‘, $feed->itemTitle); ?>
который удаляет ссылку, как ожидалось, но также удаляет всю строку, когда между ссылкой и предшествующим ей словом нет пробела.
Лучший ответ:
Если вы хотите удалить все, ссылку и после ссылки, например, через предмет в вашем примере, ниже может помочь вам:
$string = «The Third Culture: The Frontline of Global Thinkinghttp://is.gd/qFioda;via @edge»; $regex = «@(https?://([-w.]+[-w])+(:d+)?(/([w/_.#-]*(?S+)?[^.s])?).*$)@»; echo preg_replace($regex, ‘ ‘, $string);
Если вы хотите сохранить их:
$string = «The Third Culture: The Frontline of Global Thinkinghttp://is.gd/qFioda;via @edge»; $regex = «@(https?://([-w.]+[-w])+(:d+)?(/([w/_.#-]*(?S+)?[^.s])?)?)@»; echo preg_replace($regex, ‘ ‘, $string); Ответ №1
Я бы сделал что-то вроде этого:
$input = «The Third Culture: The Frontline of Global Thinkinghttp://is.gd/qFioda;via @edge»; $replace = ‘»(https?://.*)(?=;)»‘; $output = preg_replace($replace, », $input); print_r($output);
Он также работает для нескольких событий:
$output = preg_replace($replace, », $input.»n».$input); print_r($output);