w3school regulares preg_replace_callback preg_replace online expresiones ejemplos php regex preg-replace

regulares - PHP utilizando preg_replace: "Delimitador no debe ser alfanumérico o barra invertida" error



regex online (4)

Estoy tratando de tomar una cadena de texto así:

$string = "This (1) is (2) my (3) example (4) text";

En cada instancia donde hay un entero positivo dentro de paréntesis, me gustaría reemplazarlo simplemente con el número entero.

El código que estoy usando ahora es:

$result = preg_replace("/((/d+)/)", "$0", $string);

Pero sigo recibiendo un

Delimitador no debe ser alfanumérico o barra invertida.

Advertencia

¿Alguna idea? Sé que hay otras preguntas aquí que responden a la pregunta, pero mi conocimiento de la expresión regular no es suficiente para pasar a este ejemplo.


1) Necesitas tener un delímetro, el ''/'' funciona bien.

2) Tienes que escapar de los caracteres ''('' y '')'' por lo que no cree que sea otra agrupación.

3) Además, las variables de reemplazo aquí comienzan en 1, no en 0 (0 contiene la coincidencia de texto COMPLETO, que incluiría los paréntesis).

$result = preg_replace("//((/d+)/)/", "//1", $string);

Algo como esto debería funcionar. Cualquier otra pregunta, vaya a la documentación de preg_replace() PHP : realmente es bueno.


Tratar:

<?php $string = "This (1) is (2) my (3) example (4) text"; $output = preg_replace(''//((/d)/)/i'', ''$1'', $string); echo $output; ?>

Los caracteres de paréntesis son caracteres especiales en una expresión regular. Necesitas escapar de ellos para usarlos.


Verifique los documentos: necesita usar un delimitador antes y después de su patrón: "//((/d+)/)/"

También querrá escapar del paréntesis externo anterior, ya que son literales, no un grupo coincidente anidado.

Ver: página de manual de preg_replace


Ya casi has llegado. Tu estas usando:

$result = preg_replace("((/d+))", "$0", $string);

  • La expresión regular que especifique como primer argumento para la familia de funciones preg_* debe delimitarse en un par de delimitadores. Como no está utilizando ningún delimitador, obtiene ese error.
  • ( y ) son meta char en una expresión regular, lo que significa que tienen un significado especial. Como quiere hacer coincidir paréntesis literales abiertos y cerrar paréntesis, debe escapar de ellos usando un / . Todo lo que sigue / se trata literalmente.
  • Puede capturar el entero correctamente usando /d+ . Pero el entero capturado estará en $1 y no $0 . $0 tendrá la coincidencia completa, es decir, el número entero entre paréntesis.

Si haces todos los cambios anteriores obtendrás:

$result = preg_replace("#/((/d+)/)#", "$1", $string);