variable una str_replace parte extraer eliminar caracteres cadena php string replace

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]=''&amp;''; } } 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

  1. 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

  2. Case insensible

    Si desea que la búsqueda no sea sensible, puede usar str_ireplace() (Observe la i para mayúsculas y minúsculas).

  3. Matriz multidimensional

    str_replace() / str_ireplace() NO funciona para matrices multidimensionales. Vea este comentario manual para tal implementación. Por supuesto, también puede reemplazar str_replace() con str_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

  1. 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.

  2. 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.

  3. Matriz multidimensional

    strtr() se opone a str_replace() NO funciona con matrices como asunto, por lo que tampoco funciona con matrices multidimensionales. Por supuesto, puede usar el código anterior de str_replace() para matrices multidimensionales y simplemente usarlo con strtr() o la implementación de stritr() .

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

  1. 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

  2. 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.

  3. Matriz multidimensional

    preg_replace() NO funciona para matrices multidimensionales.

  4. Backreference

    Tenga en cuenta que puede usar //n / $n como retroreferencia para sus grupos de captura de la expresión regular. Donde 0 es la coincidencia completa y 1-99 para sus grupos de captura.

    Además, si la referencia posterior va seguida de un número, debe usar /${n} .

  5. 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 usar preg_replace_callback() . Lo mismo cuando usa el modificador e 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.