Ваше регулярное выражение слишком много соответствует последней части .*\"
Если вы удалите эту часть, у вас будет совпадение с данными текущего примера, но первое .*
по-прежнему соответствует любому символу, включая, например, такие символы, как "[]
,
Что вы можете сделать, это заменить это первое .*
, сопоставив знак равенства, окруженный символом горизонтального пробела, таким как \h*=\h*
Обратите внимание, что вам не нужно избегать двойной кавычки.
Вы можете использовать:
\[pause\h*=\h*"(\d+)"]
Regex demo
Это будет соответствовать
\[pause
Совпадение [pause
\h*
Совпадение с нулем или более горизонтальных пробельных символов =
Совпадение = \h*"
Совпадение с нулем или более горизонтальных пробельных символовсимволы, за которыми следует "
(\d+)
Захват в группе одной или нескольких цифр "]
Соответствие "]
И заменить на:
<break time="$1ms">
или используйте <break time="$1ms"/>
Например:
$text = 'I am [pitch = "high"]Rudratosh Shastri[endpitch]. what is your name ? how are you? sorry [pause ="3000"] i can not hear you ?[rate="-70.00%"] i still can\'t hear you[endrate] ? [rate="+50.00%"]why i can\'t hear you[endrate] ?';
$text = preg_replace('/\[pause\h*=\h*"(\d+)"]/', '<break time="$1ms"/>', $text);
echo $text;
Демо