如何在使用php之前在.ism和斜杠之间获取字符串?

时间:2013-06-13 23:34:11

标签: php substr strpos

我有一个大字符串,想要在.ism和之前的斜杠/之间提取数据。例如,我想得到:life-episode-galaxy

我当前的代码在.ism之前提供所有数据。任何人都可以告诉我这里有什么问题,以及如何只在.ism和斜杠/之间获取数据?

<?

$code="media=http://somesite.com/4534543kjlkljklkjlkkljlkdsfsfo/life-episode-galaxy.ism/manifest,deliverymethod=adaptiv";
$startsAt3 = strpos($code, "/") + strlen("/");
$endsAt3 = strpos($code, ".ism", $startsAt3);
$result3 = substr($code, $startsAt3, $endsAt3 - $startsAt3);

echo $result3;

?>

3 个答案:

答案 0 :(得分:1)

你可以使用正则表达式,但这很无聊。

您可以使用strrpos和第3个offset参数,使用负偏移量。

$ism_pos = strpos($code, ".ism");
$last_slash_pos_before_ism = strrpos($code, "/", $ism_pos - strlen($code));
$result = substr($code, $last_slash_pos_before_ism, $ism_pos);

可能会在这里和那里一个接一个地检查它。

答案 1 :(得分:1)

我会使用正则表达式:

$pattern = '#/(.*)\.ism/#U';
$matches = array();
$found = preg_match($pattern, $string, $matches);
if (1 === $found) {
    $your_desired_string = $matches[1];
} else {
    // not found
}

答案 2 :(得分:1)

我假设您的链接总是具有相同数量的斜杠/,您可以直接跳转到数组并输出正确的元素,使用str_replace删除不需要的数据

$code="media=http://somesite.com/4534543kjlkljklkjlkkljlkdsfsfo/life-episode-galaxy.ism/manifest,deliverymethod=adaptiv";
$array = explode("/", str_replace("//", "/", $code));
echo str_replace('.ism', '', $array[3]);

这将输出

life-episode-galaxy

Live Sample