0

Webページの解析中に、無効なDOM構造が原因でパーサーが停止します。特定のノードを交換して修正したい。

</div>パーサーを停止させる余分なものがあることがわかりました。

チェックする正規表現を作成する必要があります:もしあれば、</div>その後に</div>[つまり<div>、間に開始タグがありません。タグにはフォローするIDまたはクラスがある可能性があるためチェック <divされます]、最後</div>は。に置き換えられ<div></div>ます。

つまり、</div>その後にが続く場合</div>、最後の1つはに置き換えられ<div></div>ます。

前もって感謝します。

例: <div> <img src="/lexus-share/images/spacer.gif" width="2" height="15" border="0" alt=""> </div> <a href="http://www.somedomain.com"><img src="/pub-share/images.jpg"></a> </div>

4

2 に答える 2

0

私が提案するのは、正規表現を使用するのではなく、これに対して別のアプローチを試すことです。ネストされたタグで機能させるのは簡単ではないからです。

ドキュメントの解析に使用している言語はわかりませんが、記述できるコード ロジックは次のとおりです。

ドキュメント全体を解析して文字列div>を検索し、2 つの変数を作成して、openingDivs と openingDivs をカウントします。

前の文字div>がの場合<、openDivs++.

前の文字が の場合div>/、divs++ を閉じてチェックしますif (closingDivs > openingDivs)

条件が真になると、プログラムにdivの位置を出力させるか、</div>空白またはnullに置き換えることができます。

お役に立てれば。:)

于 2013-02-26T13:55:08.390 に答える
0

<div>これは、ネストされたsがない場合にのみ機能します(有効かどうかは不明です)。

$result = preg_replace(
    '%</div>       # Match a closing div tag
    (              # Match and capture in group 1...
     (?:           # ...the following regex:
      (?!</?div>)  # Match (unless a div tag intervenes)
      .            # any character.
     )*            # Repeat any number of times.
    )              # End of capturing group
    (?=</div>)     # Assert that a closing div tag follows%six', 
    '</div><div>\1', $subject);

これは変わります

<div> <img src="/lexus-share/images/spacer.gif" width="2" height="15" border="0" alt=""> </div> <a href="http://www.somedomain.com"><img src="/pub-share/images.jpg"></a> </div>

の中へ

<div> <img src="/lexus-share/images/spacer.gif" width="2" height="15" border="0" alt=""> </div><div> <a href="http://www.somedomain.com"><img src="/pub-share/images.jpg"></a> </div>
于 2013-02-26T13:40:03.780 に答える