У меня много строк (твиттер-твиты), из которых я хотел бы удалить ссылки, когда я их эхо.
Я не контролирую строку, и хотя все ссылки начинаются с 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);
Я бы сделал что-то вроде этого:
$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);