¿Quieres registrarte?

ayuda con expresion regular

Citar            
MensajePublicado: 01 Mar 2010 05:46 am
Hola señores a ver si me alludan ya que ando bastante perdido ,bueno tengo el siguiente codigo pero no logro que me devuela lo que quiero.

Código :

<?php

$StrOriginal = "[b]inicio cadena";
$StrOriginal.= "[b]hola[/b]";
$StrOriginal.= "[b]mundo[/b]";
$StrOriginal.= "final cadena[/b]";

$StrBuscar = '/\[b].*\[\/b]/';

preg_match_all ($StrBuscar, $StrOriginal, $StrFinal);
 
echo var_dump($StrFinal);

?>



Lo que quiero es obtener un array de esta manera:

Código :

$StrFinal[0] = "[b]inicio cadena[b]hola[/b][b]mundo[/b]final cadena[/b]"
$StrFinal[1] = "[b]hola[/b]"
$StrFinal[2] = "[b]mundo[/b]"


Gracias...

asdmaster


clabLevel: 14



  chrome
MP    
Citar            
MensajePublicado: 01 Mar 2010 07:15 pm
Saludos!

Estube testeando hasta que caí con este algoritmo...

Código :

<?php
// 1. Cadena original
 $StrOriginal = "[b]inicio cadena"; 
 $StrOriginal .= "[b]hola[/b]"; 
 $StrOriginal .= "[b]mundo[/b]"; 
 $StrOriginal .= "final cadena[/b]";
// 2. Guardamos la cadena original en la posición cero (0) del Array $StrFinal
 $StrFinal[] = $StrOriginal;
// 3. Quitamos el primer [b] y el ultimo [b] de la cadena original para usar preg_match_all
 $StrOriginal = ltrim($StrOriginal, '[b]');
 $StrOriginal = rtrim($StrOriginal, '[/b]');
// 4. Expresion regular usando preg_match_all utilizando [b] para dividir la cadena
 preg_match_all('/(\[([b]+)[^\]]*\])(.*?)(\[\/\\2\])+/', $StrOriginal, $matches, PREG_SET_ORDER);
// 5. Loop sobre $matches, que devuelve [b]string[/b]
 foreach ($matches as $v)
    $StrFinal[] = $v[0];
// 6. Ver resultados
 print_r($StrFinal);


Probalo y me contas! Good Coding!

Necrophasto


clabLevel: 144
Ushuaia, Tierra del Fuego, Argentina



  firefox
MP   Email   Web
Citar            
MensajePublicado: 01 Mar 2010 10:06 pm
Gracias amigo Necrophasto voy a probar el codigo ...
Saludos!!!

asdmaster


clabLevel: 14



  chrome
MP    
Citar            
MensajePublicado: 02 Mar 2010 02:22 am

Necrophasto escribió:

Saludos!

Estube testeando hasta que caí con este algoritmo...

Código :

<?php
// 1. Cadena original
 $StrOriginal = "[b]inicio cadena"; 
 $StrOriginal .= "[b]hola[/b]"; 
 $StrOriginal .= "[b]mundo[/b]"; 
 $StrOriginal .= "final cadena[/b]";
// 2. Guardamos la cadena original en la posición cero (0) del Array $StrFinal
 $StrFinal[] = $StrOriginal;
// 3. Quitamos el primer [b] y el ultimo [b] de la cadena original para usar preg_match_all
 $StrOriginal = ltrim($StrOriginal, '[b]');
 $StrOriginal = rtrim($StrOriginal, '[/b]');
// 4. Expresion regular usando preg_match_all utilizando [b] para dividir la cadena
 preg_match_all('/(\[([b]+)[^\]]*\])(.*?)(\[\/\\2\])+/', $StrOriginal, $matches, PREG_SET_ORDER);
// 5. Loop sobre $matches, que devuelve [b]string[/b]
 foreach ($matches as $v)
    $StrFinal[] = $v[0];
// 6. Ver resultados
 print_r($StrFinal);


Probalo y me contas! Good Coding!


Solución efímera, no resuelve lo que en verdad plantea asdmaster

Maikel
BOFH

Bastard Operators From Hell
clabLevel: 4770 Genero:Masculino
Donde todo es permitido... Venezuela

7 Tutoriales
12 Tips

  firefox
MP    
Citar            
MensajePublicado: 02 Mar 2010 04:15 pm

Maikel escribió:

Necrophasto escribió:

Saludos!

Estube testeando hasta que caí con este algoritmo...

Código :

<?php
// 1. Cadena original
 $StrOriginal = "[b]inicio cadena"; 
 $StrOriginal .= "[b]hola[/b]"; 
 $StrOriginal .= "[b]mundo[/b]"; 
 $StrOriginal .= "final cadena[/b]";
// 2. Guardamos la cadena original en la posición cero (0) del Array $StrFinal
 $StrFinal[] = $StrOriginal;
// 3. Quitamos el primer [b] y el ultimo [b] de la cadena original para usar preg_match_all
 $StrOriginal = ltrim($StrOriginal, '[b]');
 $StrOriginal = rtrim($StrOriginal, '[/b]');
// 4. Expresion regular usando preg_match_all utilizando [b] para dividir la cadena
 preg_match_all('/(\[([b]+)[^\]]*\])(.*?)(\[\/\\2\])+/', $StrOriginal, $matches, PREG_SET_ORDER);
// 5. Loop sobre $matches, que devuelve [b]string[/b]
 foreach ($matches as $v)
    $StrFinal[] = $v[0];
// 6. Ver resultados
 print_r($StrFinal);


Probalo y me contas! Good Coding!


Solución efímera, no resuelve lo que en verdad plantea asdmaster


Creo que tu respuesta no aporta nada, de onda... pero acá estamos intentando solucionar un problema de un usuario, si nos hechas una mano podríamos llegar a una solución más rápido.

Necrophasto


clabLevel: 144
Ushuaia, Tierra del Fuego, Argentina



  firefox
MP   Email   Web
Citar            
MensajePublicado: 03 Mar 2010 02:20 pm
Intenta con este patrón:

Código :

$o = preg_quote("[b]");
$c = preg_quote("[/b]","/");
$StrBuscar = "/$o(((?>[^$o$c]+)|(?R))*)$c/";



Mas información en : Expresiones Regulares Recursivas

saludos

Maikel
BOFH

Bastard Operators From Hell
clabLevel: 4770 Genero:Masculino
Donde todo es permitido... Venezuela

7 Tutoriales
12 Tips

  firefox
MP    

   Página 1 de 1

Responder al tema
Respuesta Rapida


 

 

Cristalab BabyBlue + BloodBerry © 2007 Cristalab
Powered by phpBB © 2001, 2007 phpBB Group

3 6 7 8 10 11 12 14 15 17 18 28 34 38 40 44 45 46 47 48 49