Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-从字体URL中删除查询字符串_Php_Regex_Replace_Preg Replace_Query String - Fatal编程技术网

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

PHP-从字体URL中删除查询字符串,php,regex,replace,preg-replace,query-string,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'); } 任何帮助都将不胜感激。这里有一个广泛的正则表达式(它几乎可以匹配第一个?)但这应该为您提供路径的起点: echo preg_replace("/^([^?]+).*

我在PHP变量中有以下字符串(示例):

@font-face {  
    src: url('../some-font.eot?v=4.6.3');
}
我需要通过.eot?搜索每一行。如果找到,则进行更换,以导致:

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

任何帮助都将不胜感激。

这里有一个广泛的正则表达式(它几乎可以匹配第一个
)但这应该为您提供路径的起点:

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

../some-font.eot

您需要删除锚并添加一些上下文以在整个文件中进行搜索,例如使用正向查找

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

echo preg\u replace(“/(?搜索字符串,然后搜索不是结束封装字符的所有内容)

正则表达式演示:

PHP演示:

PHP:


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

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

将此替换为
.eot
,请参见。
\Q...E
序列将内部的所有字符都视为纯文本,因此不需要转义。

非常感谢Chris,它工作正常。即使没有单引号或双引号,您是否有办法替换?示例:url(../some font.eot?v=4.6.3);@EduardoSR什么是一致的,总是以
结尾?
可能是的,总是。字符串可以是:
url('../some-font.eot?v=4.6.3');
url(../some-font.eot?v=4.6.3”)
url(../some-font.eot?v=4.6.3)
我可以做第二个preg_替换,不需要是唯一的正则表达式,因为您的第一个解决方案同时匹配双引号和单引号。我测试了SEPPHc/2,没有引号,它将删除右括号。如果我有引号,它将删除右引号和右括号。非常感谢Jan,您的解决方案也能按预期工作。您是否即使没有单引号或双引号,也有替换的方法吗?示例:url(../some font.eot?v=4.6.3);@EduardoSR:当然,更新了演示-只需在字符类中添加另一个
$string = "@font-face {  
    src: url('../some-font.eot?v=4.6.3');
}";
echo preg_replace('/eot\?[^\'"]+/', 'eot', $string);
\Q.eot?\E[^'")]+