Foros del Web » Programando para Internet » PHP »

Expresión regular: cambiar paréntesis

Estas en el tema de Expresión regular: cambiar paréntesis en el foro de PHP en Foros del Web. Gente, Estoy trabado en lo siguiente. $cadena= " (hola mundo) este es un texto de ejemplo (segundo parentesis)"; Necesito cambiar el PRIMER PARENTESIS completo por ...
  #1 (permalink)  
Antiguo 14/02/2012, 16:28
 
Fecha de Ingreso: mayo-2003
Mensajes: 312
Antigüedad: 20 años, 10 meses
Puntos: 2
Expresión regular: cambiar paréntesis

Gente,
Estoy trabado en lo siguiente.

$cadena= "(hola mundo) este es un texto de ejemplo (segundo parentesis)";

Necesito cambiar el PRIMER PARENTESIS completo por Parentesis: hola mundo

Es decir: (hola mundo) ---> Parentesis: hola mundo

Quedando:

$cadena= "Parentesis: hola mundo este es un texto de ejemplo (segundo parentesis)";

Sólo debería afectar al primero, que es con lo que empieza la cadena.

He probado con:
preg_replace('/\((.+)\)/', "$patrón", $cadena);

Pero... No logro reemplazar la primera ocurrencia ni colocar bien el patrón para que me salga Parentesis: hola mundo. No quiero acudir a un patrón fijo ya que el contenido de los paréntesis podría ser variable. Es decir: (hola mundo) (hola juan) (hola pablo), etc.

Alguna sugerencia?

MIL gracias.
  #2 (permalink)  
Antiguo 14/02/2012, 16:47
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 8 meses
Puntos: 793
Respuesta: Expresión regular: cambiar paréntesis

Podrías hacer algo así y mejorarlo para ajustarlo a tus necesidades:

Código PHP:
Ver original
  1. <?php
  2.  
  3. $cadena = "(hola mundo) este es un texto de ejemplo (segundo parentesis)";
  4. echo preg_replace('#\(([\w\s]+)\)#i', 'Parentesis: $1', $cadena, 1);
  5. //Parentesis: hola mundo este es un texto de ejemplo (segundo parentesis)
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #3 (permalink)  
Antiguo 14/02/2012, 17:19
 
Fecha de Ingreso: mayo-2003
Mensajes: 312
Antigüedad: 20 años, 10 meses
Puntos: 2
Respuesta: Expresión regular: cambiar paréntesis

Como siempre, mil gracias andresdzphp

Contar con tu sapiencia, realmente hace que el aprendizaje se vuelva más viable.

Una duda anexa:
A modo de prueba, descubrí que funciona bien para ese caso, pero, si la extracción tuviera un acento, no.

Ejemplo:

$cadena = "(Hola Inés) texto de ejemplo (Hola Juan) sigue el texto (Hola Pedro) (Hola María)";

Probé agregando \W
Quedando: \(([\w\s\W]+)\)

Pero la hacerlo me extrae la cadena completa, no el reemplazo con Hola Inés.

Infinitamente agradecido. Gracias por el tiempo como la dedicación.
Abrazos.
  #4 (permalink)  
Antiguo 14/02/2012, 17:23
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 8 meses
Puntos: 793
Respuesta: Expresión regular: cambiar paréntesis

Faltaría agregar las letras con tildes:

Código PHP:
Ver original
  1. <?php
  2. $cadena = "(Hola Inés) este es un texto de ejemplo (segundo parentesis)";
  3. echo preg_replace('#\(([\wáéíóú\s]+)\)#i', 'Parentesis: $1', $cadena, 1);
  4. //Parentesis: Hola Inés este es un texto de ejemplo (segundo parentesis)

Si tu paréntesis está siempre al inicio podrías poner:

Código PHP:
Ver original
  1. <?php
  2. $cadena = "(Hola Inés) este es un texto de ejemplo (segundo parentesis)";
  3. echo preg_replace('#^\(([\wáéíóú\s]+)\)#i', 'Parentesis: $1', $cadena);

Si no te importa lo que hay dentro de los paréntesis:

Código PHP:
Ver original
  1. <?php
  2. $cadena = "(Hola Inés) este es un texto de ejemplo (segundo parentesis)";
  3. echo preg_replace('#\((.+?)\)#i', 'Parentesis: $1', $cadena, 1);
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Etiquetas: regular, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:54.