A ver si este código te sirve, está un poco desordenado y precisa que tu cadena sea igual a la que mostraste, ya que no dejaste muy bien el planteamiento del problema ni las variantes que pudiera tener esta cadena, se basa en los siguientes puntos:
1.- La cadena original separa sus elementos por ";"
2.- Cada subcadena se separa de la siguiente forma:
- Un valor antes de "("
Dentro de los paréntesis encontramos dos valores, separados por "-" pero que ese mismo string se repite 3 veces, así que siempre buscamos la coincidencia de "-" cuando se repita la segunda vez
Código PHP:
<%
'Funcion que devuelve el string de acuerdo al caracter buscado
'en el sentido buscado y con cierto número de coincidencias
Function EncuentraPos(cadena, caracter, CualCaracter, sentido)
itera = 0
For x = 1 to len(cadena)
If mid(cadena, x, 1) = caracter Then
itera = itera + 1
End If
If itera = CualCaracter Then
Exit For
End If
Next
If sentido = "izquierda" Then
EstaCadena = mid(cadena, 1, x - 1)
ElseIf sentido = "derecha" Then
EstaCadena = mid(cadena, x + 1)
End If
EncuentraPos = EstaCadena
End Function
'Función que obtiene la posición de un caracter buscado
'en sentido adelante o atrás
Function ObtenPos(cadena, caracter, tipo)
If tipo = "adelante" Then
ObtenPos = instr(1, cadena, caracter)
Elseif tipo = "atras" Then
Obtenpos = instrRev(caracter, cadena, len(cadena))
End If
End Function
'Descompone la cadena y la imprime
Sub ImprimeItems(ParseaMe)
item_uno = ObtenPos(ParseaMe, "(", "adelante")
str_item_uno = left(ParseaMe, item_uno - 1)
Response.Write str_item_uno & "<br>"
str_item_dos = mid(ParseaMe, item_uno + 1, (len(parseaMe) - item_uno) - 1)
str_item_tres = str_item_dos
str_item_dos = EncuentraPos(str_item_dos, "-", 2, "izquierda")
Response.Write str_item_dos & "<br>"
str_item_tres = EncuentraPos(str_item_tres, "-", 2, "derecha")
Response.Write str_item_tres & "<br>"
End Sub
'Esta es la cadena que envías
cadena_envio=";46(Fri Jun 11 00:00:00 GMT-0300 2004-Mon Jun 14 00:00:00 GMT-0300 2004);47(Tue Jun 15 00:00:00 GMT-0300 2004-Wed Jun 23 00:00:00 GMT-0300 2004)"
'El identificador en este caso es el ";" a partir de esto
'hacemos un arreglo
arrOriginal = split(cadena_envio, ";")
'iteramos e invocamos a la sub, siempre y cuando el índice
'contenga un valor distinto de empty
For i = 0 to uBound(arrOriginal)
If not arrOriginal(i) = "" Then
ImprimeItems trim(arrOriginal(i))
End If
Next
%>
A lo mejor no es la mejor solución, pero funciona si tu cadena cumple con lo que pusiste, a lo mejor investigando sobre expresiones regulares lo puedes resolver mejor!
Salu2,
P.D. Ya dije la palabra "mejor"???