<span class="itemopener">82 top</span> <span class="allopener">all</span>
如何更改以上内容:
<span class="itemopener">top</span> <span class="allopener">82</span>
在html文件上使用PHP,其中包含大约30个HTML片段。
注意:82可以是大于1的任何整数。
此外,我想从一个新文件中运行此脚本,该文件放在一个目录中,该目录将运行搜索并替换该目录中的每个8000 HTML文件一次(脚本不能超时)完成 - 也许是一些反馈。)
答案 0 :(得分:2)
我写了替换行的函数:
function replace($row){
$replaced = preg_replace_callback("~(\<span class=\"itemopener\"\>)(\d{1,5})\s(top\</span\>.*\<span class=\"allopener\"\>).{3}(\</span\>)~iU", function($matches){
$str = $matches[1] . $matches[3] . $matches[2] . $matches[4];
return $str;
}, $row);
return $replaced;
}
$s = '<span class="itemopener">82 top</span> <span class="allopener">all</span>';
$replaced = replace($s);
echo "<pre>" . print_r($replaced, 1) . "</pre>";
exit();
如果你要将文件排成一行,并做一些简单的检查是否有你想要替换的跨度,那么你可以将它们发送到这个函数中。 但是,根据您指定的文件数量,需要一些时间。
要扫描路径中的所有文件,您可以在那里使用我的答案:scandir 经过少量编辑后,您可以将其修改为只读.htm文件,并返回您想要的结构..
然后你拿走所有扫描的htm文件并用这样的方法处理它们:
$allScannedFiles = array("......");
foreach($allScannedFiles as $key => $path){
$file = file_get_contents($path);
$lines = explode(PHP_EOL, $file);
$modifiedFile = "";
foreach($lines as $line){
if(strpos($line, "span") && strpos($line, "itemopener")){
$line = replace($line);
}
$modifiedFile .= $line . PHP_EOL;
}
file_put_contents($path, $modifiedFile);
}
我从头部写了这个片段,因此需要进行一些测试.. 然后运行它,去做自己的咖啡,等待:) 如果它会超时,你可以增加php超时。如何做到这一点在这里被问及并回答:how to increase timeout in php
或者您可以尝试将文件作为DOMDocument加载,并在该类documentation of DomDocument上进行替换 但如果在某个地方的文件中无效的html,可能会导致问题..
答案 1 :(得分:1)
我正在使用由@Jimmmy创建的函数(由d{2}
替换范围d{1,5}
,因为“注意:82可以是大于1的任何整数”)并添加了文件搜索(测试并运行很棒):
<?php
function replace($row){
$replaced = preg_replace_callback("~(\<span class=\"itemopener\"\>)(\d{1,5})\s(top\</span\>.*\<span class=\"allopener\"\>).{3}(\</span\>)~iU", function($matches){
$str = $matches[1] . $matches[3] . $matches[2] . $matches[4];
return $str;
}, $row);
return $replaced;
}
foreach ( glob( "*.html" ) as $file ) // GET ALL HTML FILES IN DIRECTORY.
{ $lines = file( $file ); // GET WHOLE FILE AS ARRAY OF STRINGS.
for ( $i = 0; $i < count( $lines ); $i++ ) // CHECK ALL LINES IN ARRAY.
$lines[ $i ] = replace( $lines[ $i ] ); // REPLACE PATTERN IF FOUND.
file_put_contents( $file,$lines ); // SAVE ALL ARRAY IN FILE.
}
?>