PHP-从字体URL中删除查询字符串
我在PHP变量中有以下字符串(示例):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("/^([^?]+).*
@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[^'")]+