2010-06-09 101 views
0

嗨,我有以下的代碼,但我不是REG EXP的一大樂趣,因爲他們太混亂:PHP Preg_replace_callback問題

<?php 
$r = '|\\*(.+)\\*|'; 
$w = ''; 
$s = 'hello world *copyMe* here'; 
function callbk($str){ 
    print_r($str); 
    foreach($str as $k=>$v) { 
     echo $v; 
    } 
} 
$t = preg_replace_callback($r,'callbk',$s); 

//output: Array ([0] => *copyMe* [1] => copyMe) *copyMe*copyMe 


?> 

我的問題是爲什麼會出現兩個「* copyMe *」和「 copyMe「? 我希望得到其中一個或另一個,而不是兩個。 任何幫助將appriciated。

回答

1

因爲您使用捕獲表達式()。如果你省略括號,你只會得到*copyMe*

+0

不錯的:)我認爲括號內的東西,但這並沒有把戲;) – Val 2010-06-09 15:14:34

+1

也只是一個簡短的說明:它被認爲是最好的做法是用'/'作爲分隔符而不是'|'來寫你的正則表達式。 – 2010-06-09 15:17:56