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.
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);