php preg用参数/查询字符串替换文件扩展名
我对php中的preg replace有一个问题 我需要获取以以下参数结尾的文件扩展名:php preg用参数/查询字符串替换文件扩展名,php,regex,preg-replace,Php,Regex,Preg Replace,我对php中的preg replace有一个问题 我需要获取以以下参数结尾的文件扩展名: ../font/fontawesome-webfont.eot?v=3.2.1 ../font/fontawesome-webfont.eot?#iefix&v=3.2.1 ../font/fontawesome-webfont.woff?v=3.2.1 ../font/fontawesome-webfont.ttf?v=3.2.1 ../font/fontawesome-webfo
../font/fontawesome-webfont.eot?v=3.2.1
../font/fontawesome-webfont.eot?#iefix&v=3.2.1
../font/fontawesome-webfont.woff?v=3.2.1
../font/fontawesome-webfont.ttf?v=3.2.1
../font/fontawesome-webfont.svg#fontawesomeregular?v=3.2.1
等等
我尝试使用此功能:
pathinfo($path[1], PATHINFO_EXTENSION);
但它给出了点字符“1”之后的最后一部分
我尝试获取css文件,并用特定的路径名替换url中的路径,以便扩展名
下面是我的代码示例:
class class_name {
private $img_exts, $font_exts;
function __construct() {
$this->img_exts = array('jpg','jpeg','png','gif');
$this->font_exts = array('ttf','woff','eot','otf');
}
function get_css_file() {
$css = file_get_contents('font-awesome.css');
$css = preg_replace_callback('/url\((?!data)"?\'?(.*?)"?\'?\)/',array($this,'replace_files_callback'), $file);
return $css;
}
function replace_file_callback($file) {
$ext = pathinfo($path[1], PATHINFO_EXTENSION);
// here is the code which i failed!!!
$ext_niddle = preg_replace('/(.*)?(\.)?(.*)?\.([a-zA-z0-9]{2,4})\??\#?(.*)?/','$4',$path[1]);
$fname = basename($path[1]);
if (in_array($ext_niddle, $this->img_exts)) {
return "url('../img/$fname')";
} elseif (in_array($ext_niddle, $this->font_exts)) {
return "url('../fonts/$fname')";
} else {
return "url('../data/$fname')";
}
}
}
所以我失败了
我尝试替换这个:
@font-face {
font-family: 'FontAwesome';
src: url('../font/fontawesome-webfont.eot?v=3.2.1');
src: url('../font/fontawesome-webfont.eot?#iefix&v=3.2.1') format('embedded-opentype'), url('../font/fontawesome-webfont.woff?v=3.2.1') format('woff'), url('../font/fontawesome-webfont.ttf?v=3.2.1') format('truetype'), url('../font/fontawesome-webfont.svg#fontawesomeregular?v=3.2.1') format('svg');
font-weight: normal;
font-style: normal;
}
为此:
@font-face {
font-family: 'FontAwesome';
src: url('../fonts/fontawesome-webfont.eot?v=3.2.1');
src: url('../fonts/fontawesome-webfont.eot?#iefix&v=3.2.1') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff?v=3.2.1') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=3.2.1') format('truetype'), url('../data/fontawesome-webfont.svg#fontawesomeregular?v=3.2.1') format('svg');
font-weight: normal;
font-style: normal;
}
我对以下文件名很好奇:
../folder/font.name.ttf?ver=1.2.3
或者像这样的
如果你发现一个不合适的代码,请帮助我
我将在这个项目中使用它:
提前感谢…
<?php
$uri = "../font/fontawesome-webfont.eot?v=3.2.1";
preg_match("/\/(.+?)\.(.+?)(#|\?)/", $uri, $m);
$ext = $m[2];
echo $ext;
?>
如何使用:
输出:
fname=fontawesome-webfont.eot ext=eot
fname=fontawesome-webfont.eot ext=eot
fname=fontawesome-webfont.woff ext=woff
fname=fontawesome-webfont.ttf ext=ttf
fname=fontawesome-webfont.svg ext=svg
非常感谢您的回答,但它不适用于标准文件名,如:file-name-something.img和:file.name.jpgit给出了以下错误:未定义索引:第行路径:$fname=basename($parse['path'])@dreamlore:真奇怪,
print\r($parse)
的输出是什么?它在这里工作:但不是我的服务器。我想我需要调试一下。。。我和print\r核对过了,没有错。数组([path]=>fancybox\u buttons.png)。。。奇怪的
fname=fontawesome-webfont.eot ext=eot
fname=fontawesome-webfont.eot ext=eot
fname=fontawesome-webfont.woff ext=woff
fname=fontawesome-webfont.ttf ext=ttf
fname=fontawesome-webfont.svg ext=svg