这将是一个HTML文件:
<li class="msgln">hello</li><li class="msgln">hi</li><li class="msgln">hey</li>
和PHP脚本:
$fp = fopen("file.html", 'a');
....
fclose($fp);
如何删除第一个<li class="msgln">hello</li>
?
<li>
中的内容已动态更改
答案 0 :(得分:2)
即使第一个li
包含其他嵌套li
s,这也会有效:
<?php
$doc = new DOMDocument();
$doc->loadHTML('<li class="msgln">hello</li><li class="msgln">hi</li><li class="msgln">hey</li>
');
$root = $doc->documentElement;
$p = $doc->documentElement->childNodes->item(0)->childNodes;
$li = $doc->getElementsByTagName('li')->item(0);
$li->parentNode->removeChild($li);
$html = '';
foreach ($root->childNodes->item(0)->childNodes as $child) {
$html .= $doc->saveXML($child);
}
echo $html;
?>
使用regex可能会导致意外结果。
答案 1 :(得分:1)
您可以使用preg_replace
来实现此目标:
$html = file_get_contents('file.html');
$html = preg_replace('#^<li[^>]*>[^<]+</li>#i', '', $html);
答案 2 :(得分:1)
如果文件的内容与描述完全相同,那么您可以使用strip_tags(),例如:
$fp = fopen("file.html", 'a');
$content = fread($fp);
$content = strip_tags($content);
fclose($fp);
或者你可以使用正则表达式,但这会慢一些。
答案 3 :(得分:1)
$fp = fopen("file.html", 'a');
$content = fread($fp);
$text = preg_replace( "/<li.+?>.+?<\/li>/is", "", $content, 1 );
fclose($fp);
答案 4 :(得分:0)
试试这个(没有正则表达式)
//string contains the file value
$string = '<li class="msgln">hello</li><li class="msgln">hi</li><li class="msgln">hey</li>';
$tag = '</li>';
$lis = explode($tag, $string);
if(count($lis) > 0) {
unset($lis[0]);
$string = implode($tag, $lis);
}