Я пытаюсь «извлечь» часть ссылки из твит-сообщения:
$tweet = "Testing a tweet with a link https://t.co/h4C0aobVnK in the middle"
У меня есть функция, которая не совсем работает, но я не знаю почему. Мне нужно получить часть ссылки, поэтому мне нужно все между https://
и space
Результат, который я хочу было бы: t.co/h4C0aobVnK
Это функция:
function dataBetween($string, $start, $end){
$sp = strpos($string, $start)+strlen($start);
$ep = strpos($string, $end)-strlen($start);
$data = trim(substr($string, $sp, $ep));
return trim($data);
}
Вот как это называется:
$link = dataBetween($tweet,'https://',' ');
Но результат я получаю это не то, что я ожидал:
t.co/h4C0aobVnK in the middl
Где я неправ?
Есть ли лучший способ извлечь часть ссылки из $tweet
? Он всегда начинается с https: //.
Вы должны использовать регулярные выражения для этого. Это может показаться сложным, но как только вы начнете использовать их, пути назад уже не будет. 😉
preg_match_all("/https:\/\/(.*?)\s/", $string, $matches);
print_r($matches);
strpos находит первое вхождение строки. Для $ ep вы должны начать искать ПОСЛЕ $ sp, а не с начала строки
$ep = strpos($string, $sp)-strlen($end);
Кроме того, вы можете использовать регулярное выражение, как это | www: // ([^] +) | i
* http не допускается в поле для комментариев, поэтому просто замените ww этим
$ep = strpos($string, $end)-strlen($start);
изменить на
$ep = strpos($string, $end)-strlen($end);
Просто ошибочное мнение.
использование
$regex = "((https?|ftp)\:\/\/)?"; // SCHEME
if(preg_match("/^$regex$/", $tweet , $m))
var_dump($m);
Ну, измени это:
$ep = strpos($string, $end)-strlen($start);
Для того, чтобы:
$ep = strpos($string, $end, $sp) - strlen($string);
Передача третьего параметра StrPos (смещение), оно начнется с того места, где началась ссылка, и получит первое » после этого.