Comunidad de diseño web y desarrollo en internet online

crear un patron en php

Citar            
MensajeEscrito el 18 Jul 2015 05:47 pm
Hola todos,
estoy intentado crear un patron para obtener el contenido del mismo en una cadena de caracteres mediante al funcion preg_match_all.

la cadena seria algo como esto: $cadena='["ES688","308987338","1"]["ES289","279288042","9"]["ES208","268434612"]["ES928","373748745"]'

lo que quiero es sacar todo lo que hay entre los corchetes, que hace referencia a un id, una referencia y una cantidad, aunque algunas veces puede venir solo el id y la referencia : ["ES289","279288042"]

preg_match_all('/\[(\w+)\]/', $cadena, $matches); ¿Alguien sabe como escapar los corchetes?

el resultado deberia ser:
elemento 1= ["ES688","308987338","1"]
elemento 2 = ["ES289","279288042","9"]
elemento 3 = "ES208","268434612"]
...

Muchas gracias a todos

Por rokerwall

1 de clabLevel



 

chrome
Citar            
MensajeEscrito el 20 Jul 2015 12:26 pm
A ver...

Código PHP :

<?php
/* Muestra una variable para debug */
function ShowVar($var, $type = false) {
   echo "<pre>";
   if ($type) { var_dump($var); }
   else { print_r($var); }
   echo "</pre>";
} // ShowVar

$cadena='["ES688","308987338","1"]["ES289","279288042","9"]["ES208","268434612"]["ES928","373748745"]';

$a = preg_match_all('_\[(.*?)\]_im', $cadena, $resultado);

ShowVar($resultado);


?>


Esto me da como resultado esto:

Código :

Array
(
    [0] => Array
        (
            [0] => ["ES688","308987338","1"]
            [1] => ["ES289","279288042","9"]
            [2] => ["ES208","268434612"]
            [3] => ["ES928","373748745"]
        )

    [1] => Array
        (
            [0] => "ES688","308987338","1"
            [1] => "ES289","279288042","9"
            [2] => "ES208","268434612"
            [3] => "ES928","373748745"
        )

)

¿Te sirve?.

Una cosa que es bueno saber es que en el parámetro donde pones la expresión regular, el primer carácter (guión bajo en mi caso) es el carácter que indica dónde comienza y donde termina la expresión regular, no tiene que ser obligatoriamente la barra inclinada.

Ah!, no le hagas caso a la función ShowVar() es simple conveniencia :).

Por DriverOp

Claber

2510 de clabLevel



 

chrome
Citar            
MensajeEscrito el 20 Jul 2015 01:02 pm
Muchas gracias!! La respuesta es lo que queria, precisamente eso. No conseguia obtener los resultados y pensaba que el error estaba en que no escapaba los corchetes y resulta que era otra parte.

Una cosilla mas, para mi esta parte de los patrones estoy un poco torpe, podrias indicarme algun manual o referencia donde aprender mas sobre estos patrones? estuve buscando por internet y no encontraba nada que me ayude a explicar en condiones esta parte de realizar patrones.


Muchisimas gracias de antemano,
Rokerwall

Por rokerwall

1 de clabLevel



 

chrome
Citar            
MensajeEscrito el 21 Jul 2015 12:11 pm
Me alegro que te haya servido.

Pues mira, lo que tienen las expresiones regulares es que suscitan en uno amor y odio al mismo tiempo. Odio porque son difíciles de entender, yo hace al menos una década y media que las uso y aún se me escapan algunas cosas; y amor porque una vez que descubres su potencial, no piensas en otra cosa más que resolverlo todo con regexpr.

Cualquier manual o cheatsheet que encuentres te va a servir, lo complicado es encontrar una forma de probarlas, para ello yo uso un programa que lamentablemente ya no se mantiene pero su última versión funciona perfectamente, es The Regex Coach. Donde pones la expresión regular, pones la cadena objetivo y te indica las coincidencias. Te lo recomiendo para probar las regex antes de usarlas en el código final.

Por DriverOp

Claber

2510 de clabLevel



 

chrome

 

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