我正在尝试找到一个字符串并将其替换为另一个字符串,但是当字符串中包含换行符/空格时我遇到问题
我想找到以下内容:
<tbody>
<tr>
<td>
{{ username }}
</td>
</tr>
</tbody>
并将其替换为以下内容:
<thead>
<tr>
<td>
{{ salutation }}
</td>
</tr>
</thead>
<tbody>
<tr>
<td>
{{ username}}
</td>
</tr>
</tbody>
这是我的RegEx,它显然没有像我期望的那样工作
<\s*tbody[^>]*>(.*?)<\s*/\s*tbody>
答案 0 :(得分:2)
虽然它可以在简单的情况下工作,但您通常应该not use regular expressions来解析和修改HTML。而是通过DOMDocument
使用PHP可用的DOM接口。
您可以使用此功能:
function addSalutation($html) {
$doc = new DOMDocument();
$doc->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($doc);
$tds = $xpath->query('//tbody/tr/td[contains(text(),"{{ username }}")]');
foreach(iterator_to_array($tds) as $td) {
$newTd = $doc->createElement('td', '{{ salutation }}');
$newTr = $doc->createElement('tr');
$newHd = $doc->createElement('thead');
$newTr->appendChild($newTd);
$newHd->appendChild($newTr);
$tbody = $td->parentNode->parentNode;
$tbody->parentNode->insertBefore($newHd, $tbody);
}
return $doc->saveHTML();
}
示例电话:
// Sample data
$html = '
<tbody>
<tr>
<td>
{{ username }}
</td>
</tr>
</tbody>';
// Add salutation
$html = addSalutation($html);
// Output result
echo htmlentities($html);
上查看它