Foros del Web » Programando para Internet » PHP »

Cortar cadena con expresion regular

Estas en el tema de Cortar cadena con expresion regular en el foro de PHP en Foros del Web. Buenos Dias.- Tengo un ejemplo en cadena de texto: Código PHP: $cadena  =  "[Desayuno]Desayuno continental[Almuerzo]Buffet gastronómico."  Y me gustaría descomponer la cadena de texto en un arreglo ...
  #1 (permalink)  
Antiguo 23/09/2010, 10:41
Avatar de rfadgrmm  
Fecha de Ingreso: junio-2009
Mensajes: 74
Antigüedad: 14 años, 10 meses
Puntos: 1
Pregunta Cortar cadena con expresion regular

Buenos Dias.-

Tengo un ejemplo en cadena de texto:

Código PHP:
$cadena "[Desayuno]Desayuno continental[Almuerzo]Buffet gastronómico." 
Y me gustaría descomponer la cadena de texto en un arreglo de la siguiente forma:

Código PHP:
$arreglo = array(
    
0=> array(
        
0=>"[Desayuno]",
        
1=>"Desayuno continental"
    
),
    
=> array(
        
0=>"[Almuerzo]",
        
3=>"Buffet gastronómico."
    
)
); 
La razón es que el texto entre corchetes lo voy a reemplazar con una imagen simbólica, y el resto del texto que sea la descripción, para luego distribuirlo en divisiones (HTML), como en la siguiente muestra:



Traté de hacerlo con la función preg_match, e incluso preg_match_all (descarté el uso del ereg por que en la web de php.net lo declara obsoleto), pero no encuentro el método adecuado hasta ahora, también revisé por Google, pero los ejemplos son aptos para realizar validaciones (como el correo, número telefónico, direcciones web, etc.), estaré agradecido si alguien me puede ayudar en esto.

Saludos,
__________________
"Viajando en el espacio profundo, de nova en nova, y sorteando a veces uno que otro agujero negro..." Peru@D
  #2 (permalink)  
Antiguo 23/09/2010, 10:52
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Cortar cadena con expresion regular

la expresión es sencilla... (:
Cita:
/\[([\w\s]+)\]([^\[\]]+)/
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 23/09/2010, 11:13
Avatar de rfadgrmm  
Fecha de Ingreso: junio-2009
Mensajes: 74
Antigüedad: 14 años, 10 meses
Puntos: 1
Información Respuesta: Cortar cadena con expresion regular

Hola pateketrueke.-

Gracias por tu rápida respuesta y tu aporte, logré reproducir la expresión que publicaste mediante este código:

Código PHP:
    $cadena "[Desayuno]Desayuno continental[Almuerzo]Buffet gastronómico.";
    
preg_match("/\[([\w\s]+)\]([^\[\]]+)/"$cadena$partes);
    echo 
"<p>{$cadena}</p>";
    if (
count($partes)) {
        echo 
"<pre>";
        
print_r($partes);
        echo 
"</pre>";
    } 
Y tengo este resultado:

Código HTML:
[Desayuno]Desayuno continental[Almuerzo]Buffet gastronómico.

Array
(
    [0] => [Desayuno]Desayuno continental
    [1] => Desayuno
    [2] => Desayuno continental
)
Está bien la idea, sólo que tengo 2 items con corchetes (y si se pueden rescatar los corchetes, mejor), y quisiera llegar a este resultado: (De repente no lo estoy haciendo bien)

Código PHP:
$arreglo = array(
    
0=> array(
        
0=>"[Desayuno]",
        
1=>"Desayuno continental"
    
),
    
=> array(
        
0=>"[Almuerzo]",
        
3=>"Buffet gastronómico."
    
)
); 
Una vez más, gracias por rápida respuesta...

Saludos...
__________________
"Viajando en el espacio profundo, de nova en nova, y sorteando a veces uno que otro agujero negro..." Peru@D
  #4 (permalink)  
Antiguo 23/09/2010, 11:17
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Cortar cadena con expresion regular

si quieres los corchetes entonces debes agruparlos...
Cita:
(\[[\w\s]+\])
y para obtener todos usa preg_match_all()
http://php.net/preg_match_all
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 23/09/2010, 11:33
Avatar de rfadgrmm  
Fecha de Ingreso: junio-2009
Mensajes: 74
Antigüedad: 14 años, 10 meses
Puntos: 1
De acuerdo Respuesta: Cortar cadena con expresion regular

Hola pateketrueke.-

Tienes razón, era con preg_match_all, al final tengo este código, con la sugerencia de la agrupación:

Código PHP:
    $cadena "[Desayuno]Desayuno continental[Almuerzo]Buffet gastronómico.";
    
preg_match_all("/(\[[\w\s]+\])([^\[\]]+)/"$cadena$partes);
    echo 
"<p>{$cadena}</p>";
    if (
count($partes)) {
        echo 
"<pre>";
        
print_r($partes);
        echo 
"</pre>";
    } 
Y ahora muestra lo siguiente:

Código HTML:
[Desayuno]Desayuno continental[Almuerzo]Buffet gastronómico.

Array
(
    [0] => Array
        (
            [0] => [Desayuno]Desayuno continental
            [1] => [Almuerzo]Buffet gastronómico.
        )

    [1] => Array
        (
            [0] => [Desayuno]
            [1] => [Almuerzo]
        )

    [2] => Array
        (
            [0] => Desayuno continental
            [1] => Buffet gastronómico.
        )

)
Ahora que lo analizo, descarto el uso del primer arreglo (array[0][*]), luego puedo utilizar los índices y elementos del segundo arreglo (array[1][*]) de la matriz bidimensional generados para relacionarlos con el tercer arreglo (array[2][*]), no cabe duda: excelente solución. Muchísimas gracias por la ayuda.

Saludos...
__________________
"Viajando en el espacio profundo, de nova en nova, y sorteando a veces uno que otro agujero negro..." Peru@D

Etiquetas: expresiones, regulares, arreglos
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 17:28.