0

他のユーザーの引用と引用の連鎖を可能にする掲示板を書いています。メッセージ ボードでは、<img>. <img>メッセージが引用されたときに、画像を見つけてサムネイルに置き換えたい。これが私の現在のコードです:

<?php
 $pattern = "<quote msgid=\"t,(\d+),(\d+)@(\d+)\" from=\"([A-z0-9_\.-]+)\" posted=\"(\d+)\">(.+)<img src=\"https?:\/\/i\.(minus|imgur)\.com\/([A-z0-9_\.-]+)\.(jpg|gif|png|jpeg)\"( \/)?>";
 $replace = "<div class=\"quoted-message\" msgid=\"t,$1,$2@$3\"><div class=\"message-top\">From: $4 | Posted: $5</div>$6<img src=\"http:\/\/$7.com\/$8s\.$9\" />";
 $encoded = preg_replace($pattern, $replace, $encoded);
?>

パターン自体は機能しますが、私が直面している問題は、ネストされた引用符ではうまく機能しないことです。たとえば、データは次のようになります。

<quote msgid="t,1234,3456@0" from"user" posted="test">Some words here<quote msgid="t,5635,57456@0" from"user2" posted="test">Some more <b>words</b> here<quote msgid="t,1243532,3452@0" from"user" posted="test">Something else here<img src="linktoimage"/></quote>some words can go here</quote>or here</quote>

私の現在の正規表現は、最も内側のタグに一致するだけでなく、最初の 3 つの開始引用符タグを 1 つの div タグに置き換えます。と関係があることはわかってい(.+)ますが、前のデータを確認するために他に何ができるかわかりません。

どんな助けでも大歓迎です。

4

2 に答える 2

1

正規表現はあなたの状況にはあまり適していません (非常に奇妙にここで説明されています)。本当にパーサーを使用する必要があります。

于 2012-04-21T03:27:20.613 に答える
0

(?!<quote.*?<quote)(<quote)

最も内側の引用タグに一致します。

http://regexr.com?30ng2

于 2012-04-21T03:46:04.443 に答える