las expresiones regulares pueden ser muy potentes pero a lavez muy complejas, yo con los 10 años programando, recien me lo estoy digiriendo, bueno en fin
mira la causa del problema es por tu expresion
(.+) le estas indicando, que soporte cualquier caracter, y no estas usando Modificadores, una expresion regular en PHP los modificadores, van en
esos modificadores, lo que hacen es que la expresion regular se comporte de manera diferente,
ahora volviendo al caso
(.+) le estas indicando que sea cualquier caracter INCLUYENDO las comillas dobles ", lo cual hace que sea valido, la expresion pero da un resultado que tu no buscas, a esto se le llama si no me equivoco, CODICIA de la expresion, siempre querra abarcar mas , para que realize lo invertido, puedes usar el inversor de CODICIA , que es
+? o
*?
en resumen tu codigo deberia funcionar asi
Código PHP:
Ver original$cadena='<span class="col-md-12" ></span> <span class="col-md-22" ></span>';
echo preg_replace('~ class="(.+)" ~',' class="$1" rclass="$1" ', $cadena);
resultado : <span class="col-md-12" ></span> <span class="col-md-22" rclass="col-md-12" ></span> <span class="col-md-22" ></span>
$cadena='<span class="col-md-12" ></span>';
echo preg_replace('~ class="(.+?)" ~',' class="$1" rclass="$1" ', $cadena);
resultado :
<span class="col-md-12" rclass="col-md-12" ></span>
ahora otra forma y la que mas ocupo yo, es en lugar de aceptar todo caracter, yo hago una lista negra de que no debe ir nunca jamas en la expresion ,
([^
los caracteres a evitar]+) en tu caso el caracter seria las comillas dobles,
Código PHP:
Ver original$cadena='<span class="col-md-12" ></span> <span class="col-md-22" ></span>';
echo preg_replace('~ class="(.+)" ~',' class="$1" rclass="$1" ', $cadena);
resultado : <span class="col-md-12" ></span> <span class="col-md-22" rclass="col-md-12" ></span> <span class="col-md-22" ></span>
$cadena='<span class="col-md-12" ></span>';
echo preg_replace('# class="([^"]+)" #',' class="$1" rclass="$1" ', $cadena);
resultado :
<span class="col-md-12" rclass="col-md-12" ></span>
tambien para futuras referencias, existe el preg_replace_callback, es muy potente y util, para ciertos casos