2016-03-24 4 views
1

改行文字が後に続くHTML終了タグをキャプチャし、HTMLタグのみで置き換えたいとします。このへPHP RegExp:すべてのHTML終了タグの後ろに改行文字を入れてください

<ul>\n 
    <li>element</li>\n 
</ul>\n\n 
<br/>\n\n 
Some text\n 

は、例えば、私はこれをオンにするとすぐに

preg_match_all('/(<\/[a-zA-Z]*>|<[a-zA-Z]*\/>)\n/s', $in, $matches); 

<ul> 
    <li>element</li> 
</ul>\n 
<br/>\n 
Some text\n 

問題は、私は正規表現と\n文字をキャプチャすることができないということですパターンのどこかに\ nを置くと、matches配列は空の値を返します。

興味深いの私だけ\n文字スタンドアロンに一致するようにしようとした場合、それはそれらのすべてを見つけること:

preg_match_all('/\n/s', $in, $matches); 
+0

「\ n \ n」を「\ n」に置き換えますか?マッチングのみでは何も置き換えません。 – Egg

答えて

0

は試してみてください。

preg_match_all('/(<\/[a-zA-Z]*>|<[a-zA-Z]*\/>)\\n/s', $in, $matches); 

あなたは「\」文字をエスケープする必要があります。

0

次のようなものを使用することができます

(<[^>]+>)$\R{2} 
# capture anything between a pair of <and> at the end of the line 
# followed by two newline characters 
あなたは multilineモードを使用する必要があります

a demo on regex101.comを参照してください。 PHP
が、これは次のようになります。

一般
$regex = '~(<[^>]+>)$\R{2}~m'; 
$string = preg_replace($regex, "$1", $your_string_here); 

DomDocumentパーサは空白を保存するか、捨てるする可能性を提供していますので、あなたの代わりにこれを使用する方がよいかもしれません。