簡體   English   中英

PHP:正則表達式替換,而忽略html標簽之間的內容

[英]PHP: Regex replace while ignoring content between html tags

我正在尋找一個可以在html標簽之間找到單詞或正則表達式字符串的正則表達式字符串。

假設我要替換(alpha | beta):希臘字母中的前兩個字母是alpha<b>beta</b>

我只希望它替換alpha,因為beta在<>標記之間。 因此忽略(<(.*?)>(.*?)<\\/(.*?)>)

:)

我沒有測試此頁面中使用的邏輯-http: //www.phpro.org/examples/Get-Text-Between-Tags.html但我可以確認頁面頂部的粗體邏輯點表示您不應該使用正則表達式進行操作的字母。

HTML不是統一的,如果在任何現實情況下使用正則表達式來處理這些標記的內容,邊緣情況總是會在后面咬你。 因此,除非您的標記極其簡單,統一,准確度100%,僅包含html(不包含CSS,javascript或垃圾),否則最好的選擇是dom解析器庫。

確實很多dom解析器庫也有問題,但是您將比regex同行領先。 獲取標簽文本競爭的最佳方法是在瀏覽器中呈現html並訪問給定dom節點的innerText屬性(或進行人工復制並手動粘貼內容)-但這並不總是一種選擇:d

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

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

當自動向文本中添加關鍵字或詞匯表鏈接或工具提示時,我經常這樣做-我對HTML標簽本身進行加擾,以便不嘗試在錨標簽的標題內或同樣荒謬的地方創建鏈接或工具提示,例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM