Visualizzazione dei risultati da 1 a 3 su 3

Discussione: espressione regolare

  1. #1

    espressione regolare

    Ciao,
    vorrei esplodere con delle espressioni regolari una variabile di questo tipo:

    {codice_1|valore_1|data_1}{codice_2|valore_2|data_ 2}...{codice_n|valore_n|data_n}

    attenendo un array del tipo
    $valore[codice_1]=valore_1
    $data[codice_1]=data_1

    mi aiutate?
    grazie

  2. #2
    Utente di HTML.it L'avatar di costi31
    Registrato dal
    Nov 2007
    Messaggi
    345
    Ciao. Ci ho messo tanto a trovare un modo rapido, semplice e pulito che permettesse di fare quello che vuoi. Alla fine però ce l'ho fatta con preg_match_all. Ecco il codice:

    Codice PHP:
    $stringa "{codice_1|valore_1|data_1}{codice_2|valore_2|data_2}";
    $pattern "/(?<=\\{)(.*?)\\|(.*?)\\|(.*?)(?=\\})/";
    preg_match_all ($pme_pattern$stringa$matches);

    /*
    $matches è un array multidimensionale restituito dalla funzione con questa struttura (nel caso in questione):

    Array (
    [0] => Array ( [0] => "codice_1|valore_1|data_1", [1] => "codice_2|valore_2|data_2" ),
    [1] => Array ( [0] => "codice_1", [1] => "codice_2" ),
    [2] => Array ( [0] => "valore_1", [1] => "valore_2" ),
    [3] => Array ( [0] => "data_1", [1] => "data_2" )
    )

    L'array che si trova con indice 0 nel primo livello non serve.
    */

    $valore = array();
    $data = array();

    // Con un ciclo for accedo a ogni gruppo di dati
    for ($i 0$i sizeof($matches[1]); $i++) {
        
    // $matches[0][$i] non ti serve, come dicevo prima
        // $matches[1][$i] = "codice" della variabile (es: "codice_1")
        // $matches[2][$i] = "valore" della variabile (es: "valore_1")
        // $matches[3][$i] = "data" della variabile (es: "data_1")
        
        // se poi vuoi raccogliere i valori nelle variabili che hai detto tu:
        
    $valore[$matches[1][$i]] = $matches[2][$i];
        
    $data[$matches[1][$i]] = $matches[3][$i];

    Va bene allora? Fammi sapere.


  3. #3
    Utente di HTML.it L'avatar di costi31
    Registrato dal
    Nov 2007
    Messaggi
    345
    Scusa, mi sono accorto ora che ho sbagliato all'inizio il nome di una variabile ma non posso più modificare il messaggio precedente. Il codice corretto quindi è questo:

    Codice PHP:
    $stringa "{codice_1|valore_1|data_1}{codice_2|valore_2|data_2}";
    $pattern "/(?<=\\{)(.*?)\\|(.*?)\\|(.*?)(?=\\})/";
    preg_match_all ($pattern$stringa$matches);

    /*
    $matches è un array multidimensionale restituito dalla funzione con questa struttura (nel caso in questione):

    Array (
    [0] => Array ( [0] => "codice_1|valore_1|data_1", [1] => "codice_2|valore_2|data_2" ),
    [1] => Array ( [0] => "codice_1", [1] => "codice_2" ),
    [2] => Array ( [0] => "valore_1", [1] => "valore_2" ),
    [3] => Array ( [0] => "data_1", [1] => "data_2" )
    )

    L'array che si trova con indice 0 nel primo livello non serve.
    */

    $valore = array();
    $data = array();

    // Con un ciclo for accedo a ogni gruppo di dati
    for ($i 0$i sizeof($matches[1]); $i++) {
        
    // $matches[0][$i] non ti serve, come dicevo prima
        // $matches[1][$i] = "codice" della variabile (es: "codice_1")
        // $matches[2][$i] = "valore" della variabile (es: "valore_1")
        // $matches[3][$i] = "data" della variabile (es: "data_1")
        
        // se poi vuoi raccogliere i valori nelle variabili che hai detto tu:
        
    $valore[$matches[1][$i]] = $matches[2][$i];
        
    $data[$matches[1][$i]] = $matches[3][$i];


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.