Получение подстроки между двумя разными разделителями

Я пытаюсь «извлечь» часть ссылки из твит-сообщения:

$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: //.

0

Решение

Вы должны использовать регулярные выражения для этого. Это может показаться сложным, но как только вы начнете использовать их, пути назад уже не будет. 😉

preg_match_all("/https:\/\/(.*?)\s/", $string, $matches);
print_r($matches);
1

Другие решения

strpos находит первое вхождение строки. Для $ ep вы должны начать искать ПОСЛЕ $ sp, а не с начала строки

$ep = strpos($string, $sp)-strlen($end);

Кроме того, вы можете использовать регулярное выражение, как это | www: // ([^] +) | i
* http не допускается в поле для комментариев, поэтому просто замените ww этим

0

   $ep = strpos($string, $end)-strlen($start);

изменить на

$ep = strpos($string, $end)-strlen($end);

Просто ошибочное мнение.

0

использование

$regex = "((https?|ftp)\:\/\/)?"; // SCHEME

if(preg_match("/^$regex$/", $tweet , $m))
var_dump($m);
0

Ну, измени это:

$ep = strpos($string, $end)-strlen($start);

Для того, чтобы:

$ep = strpos($string, $end, $sp) - strlen($string);

Передача третьего параметра StrPos (смещение), оно начнется с того места, где началась ссылка, и получит первое » после этого.

Рабочий код

0
По вопросам рекламы [email protected]