[英]Need help with regex and negative match in php
我正在嘗試匹配一個段落:
<p>content</p>
一個簡單的<p>(.*?)</p>
可以工作,但是有時該段落內部包含另一個段落,因此我的模式在第一個段落結束之后才匹配,直到第二個段落才匹配。
導致我出現問題的段落如下所示:
<p><p><b>something</b></p>content</p>
我如何匹配主要段落而忽略其中的其他p標記?
我試過了
<p>(.*?)(?<!</b>)</p>
但這沒有用。
我正在使用preg_match_all php函數。
正則表達式對於解析嵌套標簽非常糟糕。 這就是為什么您使用dom或xml解析器的原因。
當我需要處理這種情況時,我創建了一個遞歸函數findClosingTag ,用於查找下一個結束標記的索引(例如</p>
)。 如果在該索引之前還有另一個開始標記(例如<p>
),那么我遞歸並尋找接近該嵌套開始標記的位置。 繼續直到到達原始標簽的末尾。 也許不是最有效的方法,但是如果不需要的話,可能比解析完整的DOM要好。
我現在沒有代碼段,但這很簡單。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.