una - trim php
¿Cómo reemplazar ciertas partes de mi cadena? (5)
Use la función preg_replace ()
$text =''this is Old word'';
echo $text;
echo ''<br>'';
$text = preg_replace(''//bOld word/b/'', ''NEW WORD'', $text);
echo $text;
¿Cómo puedo reemplazar una cierta parte de mi cadena por otra?
Cadena de entrada:
"Hello my name is Santa"
¿Cómo puedo cambiar todas las a''s en mi cadena con algo más?
Creo que necesito un ciclo foreach
, pero no estoy seguro de cómo usarlo.
str_replace es suficiente para trabajos de reemplazo simples ( como reemplazar una sola letra ), pero generalmente se recomienda el uso de preg_replace ( si quieres algo más flexible o versátil ), porque es flexible y versátil. Y como la ''a'' es solo un ejemplo ...
$String = preg_replace(''/<string>/'',''<replacement>'',$String);
O si quiere múltiples reemplazos a la vez:
$String = preg_replace(array(''/<string 1>/'',''/<string 2>/''),array(''<replacement 1>'',''<replacement 2>''),$String);
preg_replace puede, desafortunadamente, ser bastante complicado de usar. Recomiendo las siguientes lecturas: http://php.net/manual/en/function.preg-replace.php http://www.phpro.org/tutorials/Introduction-to-PHP-Regex.html
Además, si decides usar str_replace (), y tu reemplazo debe ser sensible a mayúsculas y minúsculas, vas a necesitar str_ireplace ().
strtr ($str, array (''a'' => ''<replacement>''));
ACTUALIZAR :
strtr ("hello my name is santa", array (''a'' => ''<replacement>''));
Para responder a tu pregunta de manera más precisa.
esto también puede funcionar sin ninguna de las funciones de php str aquí cambiando tu carácter de ''a'' a ''&'' ampersand:
for ($i=0; $i<strlen($str); $i++){
if ($str[$i]==''a''){
$str[$i]=''&'';
}
}
echo $str;
Buscar y reemplazar
Hay algunas funciones / métodos diferentes para reemplazar una cierta parte de una cadena con otra cosa, todas con sus propias ventajas.
Método str_replace()
(binario seguro; distingue entre mayúsculas y minúsculas)
Argumentos
mixed str_replace (mixed $ search , mixed $ replace , mixed $ subject [, int y $ count])
str_replace()
tiene 3 argumentos requeridos, como se puede ver en la definición anterior con el orden correcto, ¡todos los cuales pueden tomar una cadena como también una matriz como argumento!
Buscar y reemplazar
buscar (cadena) Y reemplazar (cadena) → Reemplaza la cadena de búsqueda con la cadena de reemplazo.
search (array) AND replace (string) → Reemplaza todos los elementos de búsqueda con la cadena de reemplazo.
search (cadena) Y replace (array) → Lanza un aviso: "Aviso: Array to string conversion", porque una matriz de reemplazo para una sola cadena de búsqueda no tiene sentido, por lo que intenta convertir la matriz en una cadena.
search (array) AND replace (array) → Reemplaza cada elemento de búsqueda con el elemento de reemplazo correspondiente (¡Las teclas se ignoran!).
buscar (más elementos) Y reemplazar (menos elementos) → Reemplaza cada elemento de búsqueda con el elemento de reemplazo correspondiente (Para los elementos de reemplazo faltantes se usará una cadena vacía).
buscar (menos elementos) Y reemplazar (más elementos) → Reemplaza cada elemento de búsqueda con el elemento de reemplazo correspondiente (los elementos de reemplazo no necesarios se ignoran).
Tema
sujeto (cadena) → El reemplazo se realiza para la secuencia del sujeto.
subject (matriz) → El reemplazo se realiza para cada elemento de matriz.
Código
echo str_replace("search", "replace", "text search text");
echo str_replace(["t", "a"], "X", "text search text");
echo str_replace("search", ["replace1", "replace2"], "text search text");
echo str_replace(["a", "c"], ["X", "Y"], "text search text");
Salida
text replace text
XexX seXrch XexX
Notice: Array to string conversion
text seXrYh text
Notas
Gotcha!
Es importante saber que
str_replace()
funciona de izquierda a derecha de la matriz. Esto significa que puede reemplazar un valor que ya ha reemplazado. Por ejemplo:echo str_replace(array("a", "b"), array("b", "c"), "aabb"); //Probably expected output: bbcc //Actual output: cccc
Case insensible
Si desea que la búsqueda no sea sensible, puede usar
str_ireplace()
(Observe lai
para mayúsculas y minúsculas).Matriz multidimensional
str_replace()
/str_ireplace()
NO funciona para matrices multidimensionales. Vea este comentario manual para tal implementación. Por supuesto, también puede reemplazarstr_replace()
constr_ireplace()
para distinguir entre mayúsculas y minúsculas.
Si desea unir todo y crear una función que también funcione para matrices multidimensionales sin distinguir entre mayúsculas y minúsculas, puede hacer algo como esto:
<?php
function str_ireplace_deep($search, $replace, $subject)
{
if (is_array($subject))
{
foreach($subject as &$oneSubject)
$oneSubject = str_ireplace_deep($search, $replace, $oneSubject);
unset($oneSubject);
return $subject;
} else {
return str_ireplace($search, $replace, $subject);
}
}
?>
strtr()
(50% binario seguro; distinción entre mayúsculas y minúsculas)
Argumentos
string strtr (string $ str , string $ from , string $ to )
string strtr (string $ str , array $ replace_pairs )
La función toma 3 argumentos con un from y to string o toma 2 argumentos con un array de array("search" => "replace" /* , ... */)
reemplazo array("search" => "replace" /* , ... */)
, todos los cuales puedes ver en el cuadro anterior definición con el orden correcto.
2 argumentos
Comienza a reemplazar la clave más larga con el valor correspondiente y lo hace hasta que reemplaza todos key => value
pares de key => value
. En este caso, la función es binaria segura, ya que utiliza toda la clave / valor.
3 argumentos
Reemplaza el argumento desde con el argumento a en el byte sujeto por byte . ¡Entonces no es binario seguro!
Si los argumentos desde y hacia son de longitud desigual, el reemplazo se detendrá cuando alcance el final de la cadena más corta.
Tema
No acepta una matriz como asunto, solo una cadena.
Código
echo strtr("text search text", "ax", "XY");;
echo strtr("text search text", ["search" => "replace"]);
Salida
teYt seXrch teYt
text replace text
Notas
Gotcha!
Opuesto a
str_replace()
,strtr()
NO reemplaza algo dos veces. Como ejemplo:echo strtr("aabb", ["a" => "b", "b" => "c"]); //Expected output: bbcc //Actual output: bbcc
Además, si desea reemplazar varias cosas con la misma cadena, puede usar
array_fill_keys()
para completar su matriz de reemplazo con el valor.Case insensible
strtr()
NO es sensible a mayúsculas y minúsculas NI existe una función equivalente insensible a mayúsculas y minúsculas. Vea este comentario manual para una implementación insensible a mayúsculas y minúsculas.Matriz multidimensional
strtr()
se opone astr_replace()
NO funciona con matrices como asunto, por lo que tampoco funciona con matrices multidimensionales. Por supuesto, puede usar el código anterior destr_replace()
para matrices multidimensionales y simplemente usarlo constrtr()
o la implementación destritr()
.
Si desea unir todo y crear una función que también funcione para matrices multidimensionales sin distinguir entre mayúsculas y minúsculas, puede hacer algo como esto:
<?php
if(!function_exists("stritr")){
function stritr($string, $one = NULL, $two = NULL){
/*
stritr - case insensitive version of strtr
Author: Alexander Peev
Posted in PHP.NET
*/
if( is_string( $one ) ){
$two = strval( $two );
$one = substr( $one, 0, min( strlen($one), strlen($two) ) );
$two = substr( $two, 0, min( strlen($one), strlen($two) ) );
$product = strtr( $string, ( strtoupper($one) . strtolower($one) ), ( $two . $two ) );
return $product;
}
else if( is_array( $one ) ){
$pos1 = 0;
$product = $string;
while( count( $one ) > 0 ){
$positions = array();
foreach( $one as $from => $to ){
if( ( $pos2 = stripos( $product, $from, $pos1 ) ) === FALSE ){
unset( $one[ $from ] );
}
else{
$positions[ $from ] = $pos2;
}
}
if( count( $one ) <= 0 )break;
$winner = min( $positions );
$key = array_search( $winner, $positions );
$product = ( substr( $product, 0, $winner ) . $one[$key] . substr( $product, ( $winner + strlen($key) ) ) );
$pos1 = ( $winner + strlen( $one[$key] ) );
}
return $product;
}
else{
return $string;
}
}/* endfunction stritr */
}/* endfunction exists stritr */
function stritr_deep($string, $one = NULL, $two = NULL){
if (is_array($string))
{
foreach($string as &$oneSubject)
$oneSubject = stritr($string, $one, $two);
unset($oneSubject);
return $string;
} else {
return stritr($string, $one, $two);
}
}
?>
método preg_replace()
(binario seguro; distingue entre mayúsculas y minúsculas)
Argumentos
preg_replace mixto (mixto $ patrón , mixto $ reemplazo , mixto $ asunto [, int $ límite = -1 [, int y $ cuenta]])
preg_replace()
tiene 3 parámetros requeridos en el orden mostrado arriba. ¡Ahora los 3 de ellos pueden tomar una cadena como también una matriz como argumento!
Buscar y reemplazar
buscar (cadena) Y reemplazar (cadena) → Reemplaza todas las coincidencias de la expresión regular de búsqueda con la cadena de reemplazo.
search (array) AND replace (string) → Reemplaza todas las coincidencias de cada expresión regular de búsqueda con la cadena de reemplazo.
search (string) AND replace (array) → Le lanza una advertencia: "Warning: preg_replace (): El parámetro no coincide, el patrón es una cadena mientras que el reemplazo es una matriz", porque una matriz de reemplazo para una sola búsqueda no tiene sentido .
search (array) AND replace (array) → Reemplaza todas las coincidencias de cada expresión regular de búsqueda con el elemento de reemplazo correspondiente (¡Las claves se ignoran!).
buscar (más elementos) Y reemplazar (menos elementos) → Reemplaza todas las coincidencias de cada expresión regular de búsqueda con el elemento de reemplazo correspondiente (para los elementos de reemplazo faltantes se usará una cadena vacía).
buscar (menos elementos) Y reemplazar (más elementos) → Reemplaza todas las coincidencias de cada expresión regular de búsqueda con el elemento de reemplazo correspondiente (los elementos de reemplazo no necesarios se ignoran).
Tema
sujeto (cadena) → El reemplazo se realiza para la secuencia del sujeto.
subject (matriz) → El reemplazo se realiza para cada elemento de matriz.
Tenga en cuenta una vez más: ¡la búsqueda debe ser una expresión regular! Esto significa que necesita delimitadores y se necesita escapar de los caracteres especiales.
Código
echo preg_replace("/search/", "replace", "text search text");
echo preg_replace(["/t/", "/a/"], "X", "text search text");
echo preg_replace("/search/", ["replace1", "replace2"], "text search text");
echo preg_replace(["a", "c"], ["X", "Y"], "text search text");
Salida
text replace text
XexX seXrch XexX
Warning: preg_replace(): Parameter mismatch, pattern is a string while replacement is an array
text seXrYh text
Notas
Gotcha!
Igual que
str_replace()
,preg_replace()
funciona de izquierda a derecha de la matriz. Esto significa que puede reemplazar un valor que ya ha reemplazado. Por ejemplo:echo preg_replace(["/a/", "/b/"], ["b", "c"], "aabb"); //Probably expected output: bbcc //Actual output: cccc
Case insensible
Como el argumento de búsqueda es una expresión regular, simplemente puede pasar el
flag i
para búsqueda insensible a mayúsculas y minúsculas.Matriz multidimensional
preg_replace()
NO funciona para matrices multidimensionales.Backreference
Tenga en cuenta que puede usar
//n
/$n
como retroreferencia para sus grupos de captura de la expresión regular. Donde0
es la coincidencia completa y1-99
para sus grupos de captura.Además, si la referencia posterior va seguida de un número, debe usar
/${n}
.Reemplazo / "El modificador / e está en desuso"
El reemplazo en
preg_replace()
no puede usar funciones de devolución de llamada como reemplazos. Entonces debes usarpreg_replace_callback()
. Lo mismo cuando usa el modificadore
y obtiene "Deprecated: preg_replace (): El modificador / e está en desuso, use preg_replace_callback en su lugar". Ver: Reemplazar el modificador preg_replace () e con preg_replace_callback
Si desea unir todo y crear una función que también funcione para matrices multidimensionales sin distinguir entre mayúsculas y minúsculas, puede hacer algo como esto:
<?php
function preg_replace_deep($search, $replace, $subject)
{
if (is_array($subject))
{
foreach($subject as &$oneSubject)
$oneSubject = preg_replace_deep($search, $replace, $oneSubject);
unset($oneSubject);
return $subject;
} else {
return preg_replace($search, $replace, $subject);
}
}
?>
Bucles método while
/ for
/ foreach
(NO binario seguro; distinción entre mayúsculas y minúsculas)
Ahora, por supuesto, además de todas esas funciones, también puede usar un bucle simple para recorrer la cadena y reemplazar cada par de search => replace
que tenga.
Pero esto se vuelve mucho más complejo cuando lo hace binario seguro, no distingue entre mayúsculas y minúsculas y para matrices multidimensionales que simplemente utilizando las funciones anteriores. Entonces no incluiré ningún ejemplo aquí.
Cadena afectada
En este momento, todos los métodos que se muestran arriba reemplazan a toda la cadena. Pero a veces quieres reemplazar algo solo por una cierta parte de tu cadena.
Para esto, probablemente desee / puede usar substr_replace()
. O bien, otro método común es usar substr()
y aplicar el reemplazo solo en esa subcadena particular y luego juntar la cadena. Por supuesto, también puede modificar su expresión regular o hacer otra cosa para no aplicar el reemplazo a toda la cadena.