在PHP 中使用正規表示式來符合HTML 錨標記以外的關鍵字
處理HTML 內容時遇到的常見挑戰是需要執行特定操作文字中的某些關鍵字。但是,通常需要排除出現在特定 HTML 元素中的關鍵字實例,例如錨點 () 標記。
當您希望用指向某個連結的連結取代出現的關鍵字時,就會出現這種情況。字典定義,但前提是關鍵字尚未包含在具有指定目標 URL 的錨標記內。為了實現這一點,必須建構 PHP 正規表示式來匹配關鍵字,同時排除錨標記內的特定模式。
解在於採用否定先行斷言來強制執行此排除。以下正規表示式僅當關鍵字出現在錨標記內時才有效地匹配和替換它們:
<code class="php">$str = preg_replace('~Moses(?!(?>[^<]*(?:<(?!/?a\b)[^<]*)*)</a>)~i', '<a href="dictionary.php?k=keyword"></a>', $str);</code>
包含在(?>...) 內的否定先行斷言可確保關鍵字是前面沒有開始錨標記,後面沒有結束錨標記。負向先行評估字串的其餘部分,而不消耗任何字符,從而允許主匹配規則在先行後繼續。
在這種特定情況下,負向先行斷言Moses 後面沒有立即跟隨序列:
如果在Moses 關鍵字之前缺少此序列,則先行查找成功,表示該關鍵字不在錨標記內。這允許主匹配規則將關鍵字替換為所需的連結格式。
為避免意外替換,針對各種輸入場景徹底測試正規表示式以確保結果一致和準確至關重要。以上是PHP中如何使用正規表示式來匹配HTML錨標記以外的關鍵字?的詳細內容。更多資訊請關注PHP中文網其他相關文章!