Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: Problema con RegExp

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    379

    Problema con RegExp

    Ciao ragazzi, ho un problema con una regexp che proprio non riesco a risolvere!


    Devo riuscire a costruire un preg replace che esegue una sostituzione come nel seguente esempio:

    ?cache=1&limit=2 => /1/2

    ?cache&limit=2 => /cache/2

    codice:
    preg_replace('/(?:\?|& ) (?: (?:[^=]*)=([^&]*))|(?: ([^=&]*) )/i','/$1',$xyz);
    (??:[^=]*)=([^&]*)) di fatto viene considerata ed eseguita correttamente (?: ([^=&]*)) invece no... qualche suggerimento o consiglio a proposito? Non sono proprio il genio delle espressioni regolari... hahah... confido nel vostro sapere


    Grazie.

  2. #2
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    non so, forse sbaglio, ma io lo farei in un paio di passaggi, tipo:

    1. togli sempre il ?
    2. trasformi qualcosa= in /
    3. trasformi & in ''
    4. aggiungi una barra all'inizio della stringa se non c'è.

    Una cosa tipo questa:

    codice:
    function trasforma($s) {
    	$string = str_replace('?', '', $s);
    	$string = preg_replace('/[\w\d]+=/', '/', $string);
    	$string = str_replace('&', '', $string);
    	if($string[0] != '/') {
    		return '/'.$string;
    	}
    	return $string;
    }
    
    $string = '?cache=1&limit=2';
    echo trasforma($string);
    $string = '?cache&limit=2';
    echo trasforma($string);

  3. #3

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    379
    grazie della risposta gianiaz, in effetti anche la mia alternativa ad una regexp unica sarebbe stata molto simile... è che volevo compattare dal momento in cui l'operatore OR teoricamente esiste

    per quanto riguarda parse_str, non mi piace avere variabili non definite a priori dato che l'uri è comunque accessibile dal browser. Parse_str crea le variabili; non mi incute molta sicurezza.. ecco! Comunque grazie!!

  5. #5
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    Originariamente inviato da jerry6565
    grazie della risposta gianiaz, in effetti anche la mia alternativa ad una regexp unica sarebbe stata molto simile... è che volevo compattare dal momento in cui l'operatore OR teoricamente esiste
    Guarda, che questa sia la soluzione migliore in assoluto ne dubito fortemente, ma è anche vero che tante volte è meglio scrivere 3 righe di codice leggibile che una regex mostruosa.

    A mio parere la troppa ottimizzazione del codice a volte è un'ossessione inutile.


  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    379
    Beh fondamentalmente magari l'errore sta solamente nella sintassi, concettualmente l'espressione non è sto gran che

    Del resto non sono sono il tipo che si fa tanti riguardi a scrivere qualche riga in più, era solo per sapere...

  7. #7
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    Originariamente inviato da jerry6565
    Beh fondamentalmente magari l'errore sta solamente nella sintassi, concettualmente l'espressione non è sto gran che

    Del resto non sono sono il tipo che si fa tanti riguardi a scrivere qualche riga in più, era solo per sapere...
    No certo figurati, anzi se qualcuno posta la soluzione con la regex sono curioso anche io di vederla, poi magari a livello di manutenzione del codice sceglierei comunque la soluzione della funzione.


  8. #8
    Originariamente inviato da jerry6565
    per quanto riguarda parse_str, non mi piace avere variabili non definite a priori dato che l'uri è comunque accessibile dal browser. Parse_str crea le variabili; non mi incute molta sicurezza.. ecco! Comunque grazie!!
    Solo se la usi male:
    If the second parameter arr is present, variables are stored in this variable as array elements instead.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    379
    mi scuso per l'ignoranza, davvero non lo sapevo.
    parse_str purtroppo non riconosce valori vuoti/nulli del tipo [?var&var&var] fa un parse sui soli valori effettivi [?var=val]

  10. #10
    Originariamente inviato da jerry6565
    mi scuso per l'ignoranza, davvero non lo sapevo.
    parse_str purtroppo non riconosce valori vuoti/nulli del tipo [?var&var&var] fa un parse sui soli valori effettivi [?var=val]
    Non e' vero:
    Codice PHP:
    $str 'var&var2&var3';

    parse_str($str$arr);

    print_r($arr); 
    output:
    codice:
    Array
    (
        [var] => 
        [var2] => 
        [var3] => 
    )

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 © 2024 vBulletin Solutions, Inc. All rights reserved.