在 HTML 文件中使用 preg_replace 執行文字取代時,必須避免無意中修改 HTML 標籤。例如,考慮將某些單字包裝在 中的任務。標籤:
<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>
以下正規表示式嘗試將「yasar」替換為標籤:
preg_replace("/(asf|gfd|oyws)/", '<span>
不幸的是,此正規表示式也符合錨標記的alt屬性中的“yasar”,從而導致意外的更改。
為了防止這種不必要的匹配,可以使用斷言。透過斷言正在搜尋的單字(即「asf」、「gfd」或「oyws」)不會出現在「<」之前或在「>」之後,我們可以有效地排除 HTML 標記內的匹配項。以下是採用此方法的修改後的正規表示式:
/(asf|foo|barr)(?=[^>]*(<|$))/
前瞻斷言(?=[^>]*(<|$)) 確保該單字後面必須跟有HTML 標籤開啟符(“<”) 或字串結尾(以“$”表示)。這有效地排除了標籤內的匹配。
將此斷言合併到正規表示式中,我們可以在不修改 HTML 標籤的情況下執行替換,確保 alt 屬性中的 yasar 保持不變:
<a href="example.com" alt="yasar home page">yasar</a>
以上是如何使用 PHP Regex 避免在文字取代過程中修改 HTML 標籤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!