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);
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
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.