2011-04-16 99 views
2

我正在尋找一個正則表達式字符串,可以找到一個字或正則表達式字符串不在html標籤之間。PHP:正則表達式替換,而忽略html標籤之間的內容

說我要替換|在(α+β):希臘字母的前兩個字母是alpha<b>beta</b>

我只希望它來代替字母,因爲測試版是<>標記之間。所以忽略(<(.*?)>(.*?)<\/(.*?)>)

:)

+0

考慮在編寫問題時使用代碼{}按鈕 – Calum 2011-04-16 18:19:22

+0

對不起,剛加入本網站。將來會使用它。 :) – 2011-04-16 18:22:11

+0

沒關係:)這只是如果你嘗試使用標籤,它可能無法工作沒有代碼包裝。 – Calum 2011-04-16 18:40:03

回答

3

我沒有測試在此頁面中使用的邏輯 - http://www.phpro.org/examples/Get-Text-Between-Tags.html但我可以確認在大粗體字的頁面的頂部,說你不應該」作出的邏輯點t做你想用正則表達式做的事情。

如果您在任何真實世界的情況下使用正則表達式來處理這些標籤的內容,Html不是統一的,並且邊緣情況下將始終咬你。所以,除非你的標記是非常簡單,統一,100%準確,只包含HTML(不是CSS,JavaScript或垃圾),那麼你最好的選擇是一個DOM解析器庫。

真的很多dom解析器庫也存在問題,但是你會比正則表達式要好得多。獲取標籤文本的最佳方式是在瀏覽器中呈現html並訪問給定dom節點的innerText屬性(或者手動拷貝並粘貼內容) - 但這並不總是一個選項:d

1

這也許是「錯誤」的方式,但它的工作原理:當我需要做同樣的事情,我首先做一個preg_replace_callback找到我想匹配並且用類似Base64編碼,它。

然後我可以愉快地運行一個普通的preg_replace結果,知道它沒有匹配我想忽略的字符串的機會。然後使用preg_replace_callback中的相同模式進行解密,這次將匹配發送爲base64解碼。

我經常在自動將關鍵字或詞彙錶鏈接或工具提示添加到文本時執行此操作 - 我將自己的HTML標籤加擾,以便我不嘗試在錨標籤或某處標題內創建鏈接或工具提示例如,同樣荒謬的。

相關問題