Мне нужно заменить строку внутри короткого кода пустой строкой «". Код:Регулярное выражение и 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" должна быть внутри короткого кода (внутри [и]) для его замены.
Так что вы хотите заменить 'Rep =«1»' значение из массива. Попробуйте '\ [(. *?) (Rep =" 1 ") (. *?) \]' –
заменить rep = "1", если он находится внутри короткого кода ... – barudo