2014-11-10 4 views
0

я пытаюсь «извлечь» ссылку часть из сообщения твит:Получение подстроки между двумя различными разделителями

$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

Знаете ли вы, что делает функция? Он возвращается точно так же, как вы закодированы или скопированы. – Daan

+0

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

ответ

1

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

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

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

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

также, вы можете использовать регулярные выражения, как это | WWW: // ([^] +) | я * HTTP не разрешен в поле для комментариев, так что просто заменить WW с этим изменением

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

в

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

Просто misstype.

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 (смещение) она начнет откуда началась ссылка, и получить первый ' ' после этого.

Working code

Смежные вопросы