Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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 如何用未知字符替换路径和文件名字符串?_Php_Regex - Fatal编程技术网

Php 如何用未知字符替换路径和文件名字符串?

Php 如何用未知字符替换路径和文件名字符串?,php,regex,Php,Regex,我需要从.css和.js文件中删除版本字符串并更新路径,以便 变成这样 我使用了DomDocument,它工作得非常好,不幸的是它破坏了文档正文中的其他脚本,因此我需要找到一种替代方法。我尝试了strpos,这种方法很有效,但只返回字符串,而不是所有的HTML 我正在抓取一个站点并在本地保存文件,因此我需要删除版本控制并更新路径。版本字符串是用git散列生成的,所以虽然它们的散列字符串可能会更改,但它始终是40个字符。这就是我想要消除的 编辑 我在玩类似的东西,但它没有输出我想要的,所以

我需要从
.css
.js
文件中删除版本字符串并更新路径,以便


变成这样


我使用了
DomDocument
,它工作得非常好,不幸的是它破坏了文档正文中的其他脚本,因此我需要找到一种替代方法。我尝试了strpos,这种方法很有效,但只返回字符串,而不是所有的HTML

我正在抓取一个站点并在本地保存文件,因此我需要删除版本控制并更新路径。版本字符串是用git散列生成的,所以虽然它们的散列字符串可能会更改,但它始终是40个字符。这就是我想要消除的

编辑 我在玩类似的东西,但它没有输出我想要的,所以我打开了这个问题;我只是对正则表达式没有足够的经验

if(strpos($html,$str)!==false){
$html=substr_replace($str',,45,49);
}
请参见:

$HTML='';
$Result=preg\u replace(“/”*\/([\w\d]+)\(css | js)。*“/”,“/new/path/${1}.${2}',$HTML);
回显“$Result”;
这项工作:

$oldString = htmlspecialchars('<script type="text/javascript" src="/many/parents/path/file.js?version=c0af26a3543415d554bae1b8de55874b7736071d"></script>');

$newString = preg_replace_callback('#(src=&quot;)(/?)(\w*/)+([\w\d]*)(.js|.css)(\?version=)([\w\d]*)#', function($matches){return $matches[1].'/new/dir/'.$matches[4].$matches[5];}, $oldString);

echo $newString;
$oldString=htmlspecialchars(“”);
$newString=preg#u replace#回调('#(src=“)(/?)(\w*/)+([\w\d]*)(.js|.css)(\?version=)([\w\d]*)#',函数($matches){返回$matches[1]./new/dir/'.$matches[4].$matches[5]},$oldString);
echo$newString;
您可以尝试:

(<script type="text\/javascript".*)\?(.*?)(".*)

您可以在

中找到上述代码的示例运行,显示您已尝试过的内容?将以下模式的匹配项转换为空字符串适用于此示例,但只有您可以说明它是否适用于您的一般情况:
/(?)\r\n]*/
。这就是用一个例子来说明问题的问题。@CarySwoveland问题是我正在抓取一个站点并将其保存在本地,因此路径和版本控制需要更新。版本控制使用git哈希,所以即使版本字符串可能会更改,它也始终是40个字符。我只是想弄清楚了解如何在整个文档中删除它们。是否有帮助?或者更具体地说?@Mandy8055非常接近!不幸的是,它也将
更改为
非常接近!但返回此
,而不是
,它实际上会根据您的请求返回(

(<script type="text\/javascript".*)\?(.*?)(".*)
<?php
$re = '/(<script type="text\/javascript".*)\?(.*?)(".*)/m';
$str = '<script type="text/javascript" src="/path/file.js?version=c0af26a3543415d554bae1b8de55874b7736071d"></script>

<script src="//foobar.domain.com/?v2020.1.LTS">

<script type="text/javascript" src="/path2/file.css?version=sfsjfsbfsj00320vfvfv9494914411"></script>
';
$subst = '$1$3';

$result = preg_replace($re, $subst, $str);

echo $result;