我希望替换字符串中最后一次出现的P标记。
$bodytext = preg_replace(strrev("/<p>/"),strrev('<p class="last">'),strrev($bodytext),1);
$bodytext = strrev($bodytext);
这有效,但可以不使用strrev吗?有正则表达式解决方案吗?
类似的东西:
$bodytext = preg_replace('/<p>.?$/', '<p class="last">', $bodytext);
非常感谢任何帮助。
我的缩短版本:
$dom = new DOMDocument();
$dom->loadHTML($bodytext);
$paragraphs = $dom->getElementsByTagName('p');
$last_p = $paragraphs->item($paragraphs->length - 1);
$last_p->setAttribute("class", "last");
$bodytext = $dom->saveHTML();
答案 0 :(得分:1)
有些人会抱怨DOMDocument在解析HTML然后是一个正则表达式时更加冗长。但是,如果这意味着使用正确的工具来完成工作,那么详细程度就可以了。
$previous_value = libxml_use_internal_errors(TRUE);
$string = '<p>hi, mom</p><p>bye, mom</p>';
$dom = new DOMDocument();
$dom->loadHTML($string);
$paragraphs = $dom->getElementsByTagName('p');
$last_p = $paragraphs->item($paragraphs->length - 1);
$last_p->setAttribute("class", "last");
$new_string = preg_replace('/^<!DOCTYPE.+?>/', '', str_replace( array('<html>', '</html>', '<body>', '</body>'), array('', '', '', ''), $dom->saveHTML()));
libxml_clear_errors();
libxml_use_internal_errors($previous_value);
echo htmlentities($new_string);
// <p>hi, mom</p><p class="last">bye, mom</p>
答案 1 :(得分:0)
如何使用simple html dom?
require_once('simple_html_dom.php');
$string = '<p>hi, mom</p><p>bye, mom</p>';
$doc = str_get_html($string);
$doc->find('p', -1)->class = 'last';
echo $doc;
// <p>hi, mom</p><p class="last">bye, mom</p>