PHP - 从字体URL中删除查询字符串

时间:2017-03-25 13:56:55

标签: php regex replace preg-replace query-string

我在PHP变量中有这个字符串(示例):

@font-face {  
    src: url('../some-font.eot?v=4.6.3');
}

我需要在每一行搜索 .eot?。如果找到,请执行替换,结果为:

@font-face {      
    src: url('../some-font.eot');
}

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

使用\Q...\E序列直接前进:

\Q.eot?\E[^'")]+

将其替换为.eot并查看a demo on regex101.com\Q...\E序列将所有字符视为普通文字,因此不需要转义。

答案 1 :(得分:2)

搜索字符串,然后搜索不是封闭封装字符的所有内容。

eot\?[^'"]+

正则表达式演示:https://regex101.com/r/SEPPHc/1/

PHP演示:https://eval.in/761197

PHP:

$string = "@font-face {  
    src: url('../some-font.eot?v=4.6.3');
}";
echo preg_replace('/eot\?[^\'"]+/', 'eot', $string);

答案 2 :(得分:0)

这里有一个广泛的正则表达式(它将与第一个?匹配几乎任何东西),但这应该为您提供路径的起点:

echo preg_replace("/^([^?]+).*/", "$1", "../some-font.eot?v=4.6.3");

打印:

  

../一些-font.eot

您需要移除锚点并添加一些上下文以便在整个文件中进行搜索,例如使用正面的后观。

echo preg_replace("/(?<=src: url\(')([^?]+)[^']*?/", "$1", "src: url('../some-font.eot?v=4.6.3');");

打印:

  

src:url('../ some-font.eot');

lookbehind将确保您最终只会替换您关注的网址(例如,它不会触及评论,content属性等。)