Apabila melakukan penggantian teks menggunakan preg_replace dalam dokumen HTML, adalah penting untuk mengelak daripada mengubah suai teg HTML secara tidak sengaja. Sebagai contoh, pertimbangkan tugas membungkus perkataan tertentu dalam teg:
<p>I am making a preg_replace on html page. My pattern is aimed to add surrounding tag to some words in html. However, sometimes my regular expression modifies html tags...</p>
Reeks reg berikut cuba menggantikan "yasar" dengan teg:
preg_replace("/(asf|gfd|oyws)/", '<span>
Malangnya, regex ini juga sepadan dengan "yasar" dalam atribut alt tag anchor, mengakibatkan perubahan yang tidak diingini.
Untuk mengelakkan perlawanan yang tidak diingini sedemikian, penegasan boleh digunakan. Dengan menegaskan bahawa perkataan yang sedang dicari (iaitu, "asf," "gfd," atau "oyws") tidak muncul sebelum "<" atau selepas ">," kami boleh mengecualikan padanan dengan berkesan dalam teg HTML. Berikut ialah regex yang diubah suai yang menggunakan pendekatan ini:
/(asf|foo|barr)(?=[^>]*(<|$))/
Pernyataan pandang ke hadapan (?=[^>]*(<|$)) memastikan bahawa perkataan mesti diikuti oleh sama ada pembuka teg HTML ("<") atau hujung rentetan (diwakili oleh "$"). Ini secara berkesan mengecualikan padanan dalam teg.
Dengan memasukkan pernyataan ini ke dalam regex, kami boleh melakukan penggantian tanpa mengubah suai teg HTML, memastikan yasar dalam atribut alt kekal tidak disentuh:
<a href="example.com" alt="yasar home page">yasar</a>
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan PHP Regex untuk Mengelakkan Mengubah Suai Teg HTML Semasa Penggantian Teks?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!