PHP正则表达式在URL中提取文件名的第一部分

时间:2012-11-23 23:00:35

标签: php regex extract filenames

  

可能重复:
  How can I convert ereg expressions to preg in PHP?

我正在处理PHP脚本。

我有一个表格的网址:

http://ecx.images-amazon.com/images/I/5104Xl51zFL._SL175_.jpg

我只想抓住文件名5104Xl51zFL的第一部分。

我对regexp很新,但到目前为止我已经:

.*images\/I\/(.+?)(\.[^.]*|$)

根据regextester.com应该可以工作但不在我的PHP中。

如果它不是最佳解决方案,则不必是正则表达式。

如果它与我的PHP相关(仍在调试中):

function linkExtractor($html)
{
    if(preg_match_all('/<img ([^>]* )?src=[\"\']([^\"\']*\._SL175_\.jpe?g)[\"\']/Ui', $html, $matches, PREG_SET_ORDER)){
        foreach ($matches as $match) {
            $url = $match[2];
            echo "\n\n" .$url . "\nfile name: ";
            if(preg_match_all('.*images\/I\/(.+?)(\.[^.]*|$)', $url, $matched, PREG_SET_ORDER)) {
                foreach($matched as $name) {
                    print_r($matched);
                }
            }
        }
    }
}

5 个答案:

答案 0 :(得分:7)

$url = 'http://ecx.images-amazon.com/images/I/5104Xl51zFL._SL175_.jpg';
$path = parse_url($url, PHP_URL_PATH);
$filename = basename($path);
$partOne = strtok($filename, '.');

答案 1 :(得分:1)

这将匹配/images/I/.

之间的所有内容
$url = 'http://ecx.images-amazon.com/images/I/5104Xl51zFL._SL175_.jpg';
if(preg_match('~/images/I/(.+?)\.~',$url,$match)) {
    $name = $match[1];
}

答案 2 :(得分:1)

使用regex的一种方式:

$str='http://ecx.images-amazon.com/images/I/5104Xl51zFL._SL175_.jpg';
preg_match('/.*\/(.*?)\./',$str,$match);
print $match[1];

>>> 5104Xl51zFL

说明:

.*    # Match anything
\/    # Up to the last forwardslash (escaped)
(.*?) # Match anything after (captured, lazy)
\.    # Up to the first . (escaped)

答案 3 :(得分:1)

如果你仍然在寻找一个正则表达式来提取文件名的那一部分,那就是:

([^/.]++)[^/]+$

此表达式将匹配完整文件名。捕获组1将包含文件名中第一个点之前的每个字符。

++使这个正则表达式比只有一个+更快。这是因为当一段文本无法匹配时,正则表达式会更快失败。

答案 4 :(得分:0)

$file = basename("http://ecx.images-amazon.com/images/I/5104Xl51zFL._SL175_.jpg");
echo substr($file, 0, strpos($file, "."));

strpos比使用简单

的正则表达式要快得多
相关问题