Mengabaikan Teg HTML dalam Penggantian Ungkapan Biasa
Ungkapan biasa selalunya tidak mencukupi untuk mengendalikan tugas penghuraian HTML yang kompleks, terutamanya apabila menangani kes seperti secara terpilih mengabaikan tag. Sebaliknya, biasanya disyorkan untuk menggunakan DOMDocument dan DOMXPath untuk senario sedemikian.
Pendekatan Berasaskan DOMXPath
Untuk mengabaikan teg HTML semasa melakukan penggantian, DOMXPath boleh digunakan untuk secara terpilih mencari elemen teks dalam dokumen. Sebagai contoh, pertanyaan berikut akan menemui semua nod teks yang mengandungi istilah carian "span epal":
//*[contains(., "apple span")]/*[FALSE = contains(., "apple span")]/..
Mencipta Kelas Julat Teks
Kemudian, tersuai Kelas TextRange boleh dibuat untuk mewakili senarai nod teks DOM. Kelas ini membolehkan operasi rentetan dilakukan pada nod teks ini seolah-olah ia adalah rentetan tunggal.
Memproses Hasil Carian
Untuk setiap julat nod teks yang sepadan, < ;span> elemen boleh dibuat dan disisipkan di sekeliling nod teks untuk menyerlahkannya. Ini akan menjana hasil yang diingini tanpa menjejaskan teg HTML.
Contoh
Berikut ialah contoh kod yang menunjukkan pendekatan ini:
$doc = new DOMDocument; $doc->loadXML('<html><body>This is some <span>text</span> that span</body></html>'); $xp = new DOMXPath($doc); $anchor = $doc->getElementsByTagName('body')->item(0); $r = $xp->query('//*[contains(., "span")]/*[FALSE = contains(., "span")]/..', $anchor); foreach($r as $node) { $textNodes = $xp->query('.//child::text()', $node); $range = new TextRange($textNodes); while(FALSE !== $start = strpos($range, "span")) { $base = $range->split($start); $range = $base->split(strlen("span")); foreach($base->getNodes() as $node) { $span = $doc->createElement('span'); $span->setAttribute('class', 'search_hightlight'); $node = $node->parentNode->replaceChild($span, $node); $span->appendChild($node); } } } echo $doc->saveXML(); // Output the modified XML with highlighted text
Pendekatan ini membenarkan pengabaian teg HTML yang mantap dan cekap semasa operasi penggantian, memastikan hasil yang konsisten tanpa melanggar struktur HTML.
Atas ialah kandungan terperinci Bagaimana untuk Abaikan Teg HTML dengan Cekap Semasa Penggantian Ungkapan Biasa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!