with the str_replace regular preg_replace_callback_array preg_replace_callback preg_replace preg pattern expresion php preg-replace preg-replace-callback

php - the - ¿Cómo usar preg_replace_callback?



preg_replace_callback_array (2)

Nota : la siguiente es una respuesta general y no intenta resolver el problema específico del OP como ya se ha abordado anteriormente .

¿Qué es preg_replace_callback() ?

Esta función se utiliza para realizar una expresión regular de búsqueda y reemplazo. Es similar a str_replace() , pero en lugar de cadenas simples, busca un patrón de expresiones regulares definido por el usuario y luego aplica la función de devolución de llamada en los elementos coincidentes. La función devuelve la cadena modificada si se encuentran coincidencias, de lo contrario, cadena no modificada.

¿Cuándo debo usarlo?

preg_replace_callback() es muy similar a preg_replace() ; la única diferencia es que, en lugar de especificar una cadena de reemplazo para el segundo parámetro, usted especifica una función de callback .

Utilice preg_replace() cuando desee realizar una búsqueda y reemplazo de expresiones regulares simples. Use preg_replace_callback() cuando quiera hacer más que simplemente reemplazar. Vea el siguiente ejemplo para entender cómo funciona.

¿Cómo usarlo?

Aquí hay un ejemplo para ilustrar el uso de la función. Aquí, estamos tratando de convertir una cadena de fecha de YYYY-MM-DD a DD-MM-YYYY .

// our date string $string = ''2014-02-22''; // search pattern $pattern = ''~(/d{4})-(/d{2})-(/d{2})~''; // the function call $result = preg_replace_callback($pattern, ''callback'', $string); // the callback function function callback ($matches) { print_r($matches); return $matches[3].''-''.$matches[2].''-''.$matches[1]; } echo $result;

Aquí, nuestro patrón de expresión regular busca una cadena de fecha de formato NNNN-NN-NN donde N podría ser un dígito que oscila entre 0 y 9 ( /d es una representación abreviada de la clase de caracteres [0-9] ). Se llamará a la función de devolución de llamada y se pasará una matriz de elementos coincidentes en la cadena dada.

El resultado final será:

22-02-2014

Nota: El ejemplo anterior es solo para fines ilustrativos. No debes utilizar para analizar fechas. Use DateTime::createFromFormat() y DateTime::format() lugar. Esta pregunta tiene más detalles.

Tengo la siguiente declaración HTML

[otsection]Wallpapers[/otsection] WALLPAPERS GO HERE [otsection]Videos[/otsection] VIDEOS GO HERE

Lo que estoy tratando de hacer es reemplazar las etiquetas [otsection] con un div html. El retén es que quiero incrementar la id del div desde 1-> 2-> 3, etc.

Así, por ejemplo, la declaración anterior debe traducirse a

<div class="otsection" id="1">Wallpapers</div> WALLPAPERS GO HERE <div class="otsection" id="2">Videos</div> VIDEOS GO HERE

Hasta donde puedo investigar, la mejor manera de hacerlo es a través de preg_replace_callback para incrementar la variable de identificación entre cada reemplazo. Pero después de 1 hora de trabajar en esto, simplemente no puedo hacerlo funcionar.

Cualquier ayuda con esto sería muy apreciada!


Usa lo siguiente:

$out = preg_replace_callback( "(/[otsection/](.*?)/[/otsection/])is", function($m) { static $id = 0; $id++; return "<div class=/"otsection/" id=/"ots".$id."/">".$m[1]."</div>"; }, $in);

En particular, tenga en cuenta que he utilizado una variable static . Esta variable persiste en todas las llamadas a la función, lo que significa que se incrementará cada vez que se llame a la función, lo que sucede para cada coincidencia.

Además, tenga en cuenta que he adjuntado ots a la ID. Las ID de elementos no deben comenzar con números.

Para PHP antes de 5.3:

$out = preg_replace_callback( "(/[otsection/](.*?)/[/otsection/])is", create_function(''$m'','' static $id = 0; $id++; return "<div class=/"otsection/" id=/"ots".$id."/">".$m[1]."</div>"; ''), $in);