Aporte:
$str = 'hi test1="12c4 ab3d" blablabla test1="5678 sdfg"'Entonces necesito eliminar la cadena entre 'test1="' y '"' después de 5 caracteres, así:
'hi test1="12c4" blablabla test1="5678"'Ya probé:
$str= preg_replace('/test1="[\s\S]+?"/', 'test1=""', $str);Pero mi salida fue:
'hi test1="" blablabla test1=""'Alternativamente, sin una expresión regular y usando strpos() y substr() simples
$str = 'hi test1="12c4 ab3d" blablabla test1="5678 sdfg"'; $find = 'test1='; $p1 = stripos($str, $find) + strlen($find)+5; $p2 = strripos($str, $find) + strlen($find)+5; $new = substr($str, 0, $p1) . substr($str, $p1+5, $p2-$p1-5) . substr($str, $p2+5); echo $new . PHP_EOL;Puedes usar
$str = 'hi test1="12c4 ab3d" blablabla test1="abcd 3456 sdfs 2435"'; echo preg_replace('~\btest1="[^"\s]*\K[^"]+~', '', $str); // => hi test1="12c4" blablabla test1="abcd"Vea la demostración de PHP y la demostración de expresiones regulares .
Detalles :
\b - un límite de palabratest1=" - un texto literal[^"\s]* - cero o más caracteres que no sean espacios en blanco y "\K : operador de restablecimiento de coincidencias que elimina el texto coincidente hasta ahora del búfer de memoria de coincidencias[^"]+ - uno o más caracteres que no sean " .