2010-12-30 2 views
1

の同じ数:マッチング二つのセクション私は、次を解析するためのコードを探してる回

一部TEXTTEXT:

一部TEXTTEXT

出力されるように、私は、不要な<span>発生を削除する必要があります

私は一度これを行う正規表現を書いた:

/[^ <] * </SPAN>/i

<span></span>の両方でこの作業を同じ回数行うにはどうすればよいですか?

+5

n回目:正規表現はHTMLを解析するためのものではありません! – progo

+0

正規表現ではできないと思いますが、文法は文脈自由ではないと思います。 –

+0

@progo:もっと「like the n^1000th time」... – Tomalak

答えて

0
$result = preg_replace(
    '%(?<=<span>)  # Assert that there is a directly preceding span tag 
    <span>    # Match a span tag 
    ((?:(?!</?span>).)*) # Match the contents of the tag only if they do not include another span tag 
    </span>    # Match a closing span tag 
    (?=</span>)   # Assert that there is a directly following span tag 
    %six', 
    '\1', $subject); 

はあなたの例では動作しますが、それは一回の反復あたりのネストされたspanタグの「層」削除されるため、2回適用する必要があります。

したがって、任意にネストされたタグを使用すると、ネストの各レベルに対してこれを1回呼び出す必要があります。

+0

これは私が必要とする答えのように見えます。しかし、これをテストしている間に接続が中断されました(私は/ i修飾子を追加しただけです)。 – Leszczu

+0

うーん、どういう意味か分かりません。この正規表現では区切り文字は '/'ではなく '/'ではないので、 '/ i'を追加するとエラーが発生しますか?私は今大文字小文字を区別しないように正規表現を編集しました。 –

+0

これは、ありがとうございます。それは私のWindowsサーバーを破るように見えますが、LinuxとWindows CLIで動作します。 – Leszczu

0

あなたは<span>が直接そのマッチング</span>が直接、別の</span>によって付加される別の<span>が続いているかどうかを確認しようとすることができます。

しかし、マークアップを特定のスパンに追加できるので、スパンが役に立たないとは実際は言えません。マークアップがない場合、最後に残ったスパンも役に立たず、削除される可能性もあります。

関連する問題