【问题标题】:extract filename between last slash and question mark提取最后一个斜杠和问号之间的文件名
【发布时间】:2016-08-11 05:00:26
【问题描述】:

我想使用 regex 提取最后一个斜杠和问号之间的文件名 我阅读了一些相关的答案

([^/]*$)

但是我有几个域名,所以我想提取特定名称的文件名并寻找适用于所有域的正则表达式。 如何将其限制在某些域? 我的目标是替换域名,

http://old.domain.com/asda/dsdasd/fsdfd/bvc/filename.mp4?fdgfsdgfgfsgf
http://new.domain.com/filename.mp4

真诚的

【问题讨论】:

  • 你能清楚地说明你想在你的例子中匹配什么吗?
  • 我在我的问题中写了一个例子。

标签: php regex


【解决方案1】:

对于您的这个特定问题,请使用此解决方案或用示例详细说明您的问题

<?php
$url = 'http://old.domain.com/asda/dsdasd/fsdfd/bvc/filename.mp4?fdgfsdgfgfsgf';
//var_dump(parse_url($url));

$scheme= parse_url($url, PHP_URL_SCHEME);   // http
$host = parse_url($url, PHP_URL_HOST);   //old.domain.com
$path = parse_url($url, PHP_URL_PATH);  //asda/dsdasd/fsdfd/bvc
$filename = basename($path); //filename.mp4
echo $newUrl = $scheme.'//new.domain.com/'.$filename;
?>

输出

http//new.domain.com/filename.mp4

有关parse_url的更多信息,请阅读http://php.net/manual/en/function.parse-url.php

【讨论】:

  • 我想用正则表达式
【解决方案2】:

你可以试试

preg_replace('/(.*:\/\/).*\/(.*?)(\?.*|$)/', '$1new.domain.com/$2', $url );

用新的替换完整的域和路径。

See it here at Ideone.

编辑:

或者如果您确实需要提取文件名(如您在问题中所说)尝试

preg_match('/[^\/]+?(?=\?|$)/', $url, $matches);

as showed here.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-23
    • 2016-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    相关资源
    最近更新 更多