2015-11-03 4 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" в обоих коротких кодах удалялся. Вероятно, это может быть на регулярном выражении.

ПРИМЕЧАНИЕ: реплика = "1" должна быть внутри короткого кода (внутри [и]) для его замены.

+0

Так что вы хотите заменить 'Rep =«1»' значение из массива. Попробуйте '\ [(. *?) (Rep =" 1 ") (. *?) \]' –

+0

заменить rep = "1", если он находится внутри короткого кода ... – barudo

ответ

1

Вы должны поместить нежадным квантор в своем регулярном выражении

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

Demo

Смежные вопросы