簡體   English   中英

需要幫助正則表達式和PHP中的否定匹配

[英]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.

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