2010-12-23 16 views
1

バックエンドでWYSIWYGエディタを使用してフラッシュアプ​​リケーションを開発しました。 より多くの機能をエディタに提示する必要がありますので、私たちはWYSIWYGでカスタムタグ<をもっと開始> ... </end more>に入れることにしました。PCRE正規表現:文字列を含まない

すべてのHTMLは解析され、XMLに変換されますが、Flash内のポストに多くのコンテンツを表示するために、カスタムフェードエフェクトに変換するために、より多くのタグを開始/終了する必要があります。

ここでは、XMLの出力例を示します。この式は<文字列により開始>と最初<の端より>最初のキャプチャより開始し、多くの

/(<start more>){1,1}(.+?)(<end more>)/ 

を終了得るために

Some text outside <start more> some text inside</end more> 
some other text <start more>1 and some random stuff <start more>2 and 
thing </end more>2 and random stuff </end more> 

正規表現。私は内部のほとんどのタグを取得するために否定的な先読みのアサーションをしようとしました。動作しません。

希望します。問題を説明できないかどうか教えてください。

答えて

3

あなたはあなたがすでに持っていると言ったパーサーにその作業をする必要があります。
<start more></end more>を有効なペア(たとえば<more> </more>)に変更すると、既知のタグでなくても、すべてのHTMLパーサが正しく処理する必要があります。

あなたが主張する場合、弱い正規表現は次のようになります。

/<start more>(((?!<(?:/end|start) more>).)+)</end more>/ 
+0

ここでは一番内側のペアのみをキャプチャする例を示します。http://rubular.com/r/4p8jGiepW5 – Kobi

+0

回答と例をありがとう。コードから「more」を削除しました。「(((?!?/ end | start)>)))+)<\/end>は完璧に動作しています。他のHTMLパーサー(私はPHPのdomdocumentを試しました)を使用しない理由は、コンテンツを取得しようとすると、すべてのネストされたhtmlタグを取り除くことです(すべて太字、斜体など)興味のある人はhttp://pk.dynamiconlinesystems.com/mc_main/、まだ進行中です。 –

+0

解析されたHTMLの内容を取得する代わりに、必要な部分をHTMLシリアライザで書き出す必要があります。 – OrangeDog

2

それは正しく正規表現をXML/HTMLを解析することnot possibleです。あなたは適切なパーサーを書く必要があります。

+1

あなたのポイントをサポートするために、楽しい答えではなく、より客観的な説明の1つにリンクすることができます。 – mario

+0

私はやっていたかもしれませんが、それはそれほど楽しくはありません。 xml(または任意のツリーベースの言語)が正規ではないことが通知されると、合理的な理由を簡単に見つけることができます。 – OrangeDog

+0

html-with-regexの質問を投稿し続ける理由は、リンクが面白くないとは言えないからです。それは、めったに誰かがより簡単な選択肢を提供しているためであり、言葉は説明しないことから逃れることができないからです。 – mario