ここでクイックフィックスは以下の通りです:
'|(<p class="(simple)?comment[^"]*">)((?:[^<]+|(?!</p>).)*)</p>|is'
変更:
- 構造
(.*)
はただやみくもに取り組んでから、あなたの正規表現を停止し、すべてを、一致しますので、私はそれらを交換してきました完全一致の完全一致のインスタンス:
- ...
comment(.*)?
... – thi基本的には、すべてまたは何も一致しません。私はそれがゼロ以上の非"
文字にマッチしますので、– ... >)(.*)<\/p>
...
- 。(基本的に、それは
class
属性の開閉"
文字に一致します[^"]*
でこれを置き換え、再び、これはあまりにもマッチします私はこれを効率的なパターンに置き換えました。それは<
以外の文字と一致し、<
に達すると、</p>
が続くかどうかを確認します。 <p>
タグの末尾)、それ以外の場合は続行します。
m
この正規表現では使用されていないため、フラグを立てます。
しかし(<p class="comment">...<p>...</p></p>
を想像し、それは<p class="comment">...<p>...</p>
と一致します)信頼できないであろう。
信頼できるようにするには、再帰的な正規表現を使用するか、HTMLパーサー(扱うXHTMLの場合はXML)を使用する必要があります。不正な形式のHTML 「適切に」私が正しく あなたはこのような何か行うことができますsimplehtmldomのホームページ上の例のコードを読めば
は、第三案をString Parsingの代わりに[DOM](http://php.net/manual/en/book.dom.php)を実際に使用する[SimpleHtmlDom](http://simplehtmldom.sourceforge.net/)に代わって[phpQuery ](http://code.google.com/p/phpquery/)、[Zend_Dom](http://framework.zend.com/manual/en/zend.dom.html)、[QueryPath](http: /querypath.org/)と[FluentDom](http://www.fluentdom.org)を参照してください。 – Gordon