Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
//no regex routing: just check if the current request is done to the given routing
if(static::getRequestURI()==$URI){
$function();
static::$executed=TRUE;
}
}
}
}
La descrizione dovrebbe essere abbastanza per capire cosa voglio fare, ma lo rispiego comunque.
dato un URI del tipo: /user/{id}/post/{num}
voglio che vangano matchati tutti gli uri del tipo: /user/X1/post/X2 con X1, X2 qualsiasi serie di caratteri.
Fino a qui non c'è alcun problema: tutti gli uri vengono riconosciuti a dovere.
Tuttavia io voglio di più: voglio generare un array costruito nel seguente modo:
Codice sorgente - presumibilmente Plain Text
$param = array(
"id" => X1,
"post" => X2,
);
Questo sarebbe semplicissimo se il risultato di preg_match non fosse diverso da ciò che mi aspetto:
imposto il routing nel seguente modo: \Gishiki\Core\Routing::setRoute(\Gishiki\Core\Routing::GET, "/user/{id}/post/{post}", function($params) {});
grazie al primo var_dump so che il risultato della prima preg_match è corretto:
Va bene, passi il fatto che il primo match è ovviamente la stringa intera.....
il secondo elemento dell'array è corretto.....
ma.... io mi aspettavo un '60' come terzo elemento. Perchè ottengo solo '' anche cambiando il 60 con qualsiasi altra cosa?
Ciao, per semplicità ti mostro solo la regex che adopererei io
Codice sorgente - presumibilmente Plain Text
^\/user\/([^/]+)\/post\/([^/]+)$
Le preg_match restituiscono dovrebbero sempre (se non mi sto confondendo) come primo gruppo rilevato (pre intenderci lo 0) l'intero matching in quanto per definizione i gruppi delle regex sono enumerati partendo da 1, quindi il risultato non è cosi assurdo.
Con la regex che ho postato sopra identifichi qualsiasi cosa per id tranne gli slash cosi da non avere problemi per ogni sorta di codifica.
Ti consiglierei inoltre questo tool che negli anni si è evoluto diventando uno strumento indispensabile per la formulazione di regex http://regexr.com/ Spero di essere stato utile.
Ultima modifica effettuata da Roby94 il 02/04/2016 alle 17:04
Beh per il momento ho risolto senza regex in maniera abbastanza semplice, quindi mi ritengo soddisfatto, ma grazie comunque del consiglio. Se dovessero servirmi ancora le regex so cosa fare
Grazie dei consigli, appena ho un po di tempo provo la regex per sfizio personale
Guarda, le regex ti cambiano la vita nel campo dei parser. Tanto da portarti all'odio quando ti trovi su un sistema che non le supporta (vedi microcontrollori a 8bit). Indubbiamente un tassello indispensabile per un buon programmatore general purpose
Da quel che vedo ereg_match non funziona: la regex funziona solo su http://regexr.com/, ma non con php.
Ho messo la regex direttamente nel sorgente (non è generata a runtime) quindi non posso averla sbagliata, anche perchè faccio un var_dump ed esce esattamente la query che mi hai dato (con i caratteri di apertura e chiusura)