获取两个不同分隔符之间的子字符串


Getting a sub string between two different delimiters

我正试图从推特消息中"提取"链接部分:

$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(offset)的第三个参数时,它将从链接开始的位置开始,然后获得第一个"。

工作代码