Comunidad de diseño web y desarrollo en internet online

ayuda con expresion regular

Citar            
MensajeEscrito el 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 :

<?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 PHP :

$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...

Por asdmaster

14 de clabLevel



 

chrome
Citar            
MensajeEscrito el 01 Mar 2010 07:15 pm
Saludos!

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

Código PHP :

<?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!

Por Necrophasto

Claber

148 de clabLevel



Genero:Masculino  

Diseñador gráfico y web

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

Por asdmaster

14 de clabLevel



 

chrome
Citar            
MensajeEscrito el 02 Mar 2010 02:22 am

Necrophasto escribió:

Saludos!

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

Código PHP :

<?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

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 02 Mar 2010 04:15 pm

Maikel escribió:

Necrophasto escribió:

Saludos!

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

Código PHP :

<?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.

Por Necrophasto

Claber

148 de clabLevel



Genero:Masculino  

Diseñador gráfico y web

firefox
Citar            
MensajeEscrito el 03 Mar 2010 02:20 pm
Intenta con este patrón:

Código PHP :

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



Mas información en : Expresiones Regulares Recursivas

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.