2013-01-14 11 views
5

これはこれまでのものですが、私が試してみるとalbum-contentsubstr()で切り捨てられません。preg_replace()関数内でsubstr()関数を使用するにはどうすればよいですか?

$gallery = preg_replace('/(<div class="album-content">)(.*?)(<\/div>)/e', "'$1' . substr(\"$2\", 0, 50) . '$3'", $gallery); 

UPDATE:

は私のクラス名が誤っていたが判明し、私の正規表現が動作するようには思えません。 私は出力をエスケープするために別のstr_replace()を実行するだけでした。変更前

$gallery = preg_replace('/(<div class="album-desc">)(.*?)(<\/div>)/e', "'$1' . substr(\"$2\", 0, 50) . '$3'", $gallery); 
$gallery = str_replace('\"album-desc\"', '"album-desc"', $gallery); 

出力:すべて、とにかく

<a href="..." class="album"> 
    <div class="album-content"><p class="album-title">Album 1</p> 
     <div class="album-desc"><p>This will be truncated by substr().</p></div> 
    </div> 
    <img src="..." /> 
</a> 

ありがとう!

+1

コンテンツの前後に投稿してください。あなたのやりたいことのより良いアイデアがあります。 –

+2

置換文字列の一部として 'substr()'を使うことはできません。 – Tchoupi

+0

@MathieuImbertそれは今でも動作するようです。私の更新を参照してください。 – fishbaitfood

答えて

3

使用preg_replace_callback()

$replace = preg_replace_callback('/(asd)f/i', function($matches) { 
    $matches[1] = substr($matches[1], 0, 2); 

    return $matches[1]; 
}, 'asdf'); 

Full documentation

+0

ありがとう!私はこれを将来使用すると思う。 – fishbaitfood

0

それは、文字列のsubstrは "外部" と

..., "'$1'" . substr("$2", 0, 50) . "'$3'", ... 

する必要があるだろう。

+0

私の投稿を更新しました。私の正規表現はうまくいきました。私はあなたの方法をとにかく試みたが、うまくいかなかった。 – fishbaitfood

関連する問題