Foros del Web » Programando para Internet » PHP »

ayuda con expresiones regulares, separar cadena en array...

Estas en el tema de ayuda con expresiones regulares, separar cadena en array... en el foro de PHP en Foros del Web. amos a ver por el principio.... yo tengo un texto similar al siguiente: [code] <b>negrita</b>|*azul*||*2h*|<u>subrayado</u>|*verde*|<h1>titulo</h1><i>italica</i>|*12v*| [code] por partes: - Yo quiero obtener el texto que ...
  #1 (permalink)  
Antiguo 11/09/2003, 07:03
 
Fecha de Ingreso: agosto-2003
Mensajes: 102
Antigüedad: 20 años, 8 meses
Puntos: 0
Pregunta ayuda con expresiones regulares, separar cadena en array...

amos a ver por el principio.... yo tengo un texto similar al siguiente:

[code]
<b>negrita</b>|*azul*||*2h*|<u>subrayado</u>|*verde*|<h1>titulo</h1><i>italica</i>|*12v*|
[code]


por partes:
- Yo quiero obtener el texto que hay entre |* y *| estos separadores los he definido yo, asi que si tienen que ser otros da igual.

a) Mi intencion es que las coincidencias me las guardara en un array. En este caso:
$array[0] = azul;
$array[1] = 2h;
$array[2] = verde;
$array[3] = 12v;

b) Tambien me interesara otra funcion que me devuelva solo esto:
$array[0] = 2h;
$array[1] = 12v;

c) Y el ultimo array que me interesaria obtener es:
$array[0] = <b>negrita</b>
$array[1] = azul
$array[2] = 2h
$array[3] = <u>subrayado</u>
$array[4] = verde;
$array[6] = <h1>titulo</h1><i>italica</i>
$array[5] = 12v

a ver, todo esto ya lo tengo hecho, pues con fors, splits... es facil, mi intencion es saber si existe una funcion que te lo haga automaticamente, he mirado las reglas de expresiones regulares y bien, creo que mas o menos las he construido bien, pero que funcion me coge una cadena de texto y me devuelve un array con las subcadenas que cumplen la condicion de la expresion regular (caso a, b)? y como hago para obtener un array como en el caso c?

PD. creo que la expresion regular seria similar a:
(caso a): \|\*[0-9a-zA-Z]*\*\|
Cualquier palabra, letra o numero que este entre |* y *|

(caso b): \|\*[0-9]{1,2}(h|v)\*\|
(o sea uno o dos numeros y luego una h o una v)
  #2 (permalink)  
Antiguo 11/09/2003, 09:14
 
Fecha de Ingreso: julio-2003
Mensajes: 165
Antigüedad: 20 años, 9 meses
Puntos: 1
Hola Nark,

En realidad tus aproximaciones a las expresiones correspondientes a los dos primeros casos están muy bien. Se ve que tienes un dominio considerable de las expresiones regulares.

Respecto al caso 3, lo que puedes usar es una función del tipo preg_split() (en caso de que estés usando expresiones regulares estilo Perl).

Por ejemplo:

Código:
<?php

echo "<pre>\n";

$cadena = '<b>negrita</b>|*azul*||*2h*|<u>subrayado</u>|*verde*|' .
          '<h1>titulo</h1><i>italica</i>|*12v*|';


// Caso A

echo "\nCaso A:\n\n";

preg_match_all ('/\\|\\*(.*?)\\*\\|/', $cadena, $coincidencias);

$array = $coincidencias[1];

print_r ($array);


// Caso B

echo "\nCaso B:\n\n";

preg_match_all ('/\\|\\*(\\d{1,2}[hv])\\*\\|/', $cadena, $coincidencias);

$array = $coincidencias[1];

print_r ($array);


// Caso C

echo "\nCaso C:\n\n";

$array = preg_split ('/\\|\\*|\\*\\|/', $cadena, -1, PREG_SPLIT_NO_EMPTY);

print_r ($array);


echo "</pre>\n";

?>
Un cordial saludo
  #3 (permalink)  
Antiguo 11/09/2003, 10:15
 
Fecha de Ingreso: agosto-2003
Mensajes: 102
Antigüedad: 20 años, 8 meses
Puntos: 0
Genial leonardop, muchas pero que muchas gracias


Cita:
Mensaje Original por leonardop
En realidad tus aproximaciones a las expresiones correspondientes a los dos primeros casos están muy bien. Se ve que tienes un dominio considerable de las expresiones regulares.
Dominio de las expresiones regulares pues lo poco que he aprendido mirando manuales y ejemplos.... nada, pero nada de nada comparado contigo


en resumen que muchas gracias por sacarme de este atolladero, no lo hubiese sacado sin tu ayuda, lo simple que son las cosas cuando se conocen bien las funciones nativas del lenguaje... te debo una maestro
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 08:41.