2015-11-03 78 views
0

我需要用空字符串「」替換短代碼內的字符串。這是代碼:正則表達式和preg_replace PHP

$pattern = "#\[(.*)(rep=['\"]{1}1['\"]{1})(.*)\]#i"; 
$replacement = '[$1$3]'; 

//Test cases: 
$values = [ 
    'This is a [s1 val="1"] test', 
    'This is a [s1 val="1"] test rep="1"', 
    'This is a [s1 val="1" rep="1"] test', 
    'This is a [s1 de="2" rep="1" be="2"] test', 
    'This is a [rep="1" de="2" ] test', 
    'This is a [s2 val="1" rep="1" de="2"] test ... This is a [s3 val="1" rep="1" de="2" ] test', 
]; 

foreach($values as $value) 
{ 
    echo preg_replace($pattern, $replacement, $value) . "\n"; 
} 

前五個案例按預期工作。不幸的是,裏面有兩個rep =「1」的第六個案例沒有像預期的那樣工作,因爲我想要刪除兩個簡碼中的rep =「1」。這可能是正則表達式。

注意:rep =「1」必須位於shortcode([和]內部)以便替換。

+0

所以,你想從一個陣列代替'代表=「1」'值。嘗試'\ [(。*?)(rep =「1」)(。*?)\]' –

+0

如果它在短代碼內,則將其替換爲「1」... – barudo

回答

1

您需要將您的正則表達式中的非貪婪量詞

\[(.*?)(rep="1")(.*?)\] 
    //^^   //^^ 

Demo