Visualizzazione risultati 1 fino 7 di 7

Discussione: Usare delle variabili o delle costanti all'interno di espressioni regolari

  1. #1
    Guest

    Predefinito Usare delle variabili o delle costanti all'interno di espressioni regolari

    Non l'ho mai fatto prima e non capisco come risolvere (pare che nella guida php non ci sia nulla a riguardo).

    Devo usare una variabile all'interno del pattern sostitutivo di una regex:

    Codice PHP:
    $IDNUM="ciao";
    define('IDNUM','ciao');
    $var=preg_replace("#(testo){1}(.*)(altrotesto){1}(.*)#",'\\1'.$IDNUM.'\\3\\4',$stringa);
    $var=preg_replace("#(testo){1}(.*)(altrotesto){1}(.*)#",'\\1'.IDNUM.'\\3\\4',$stringa);
    Nel primo caso ho usato una variabile, ma visto che il simbolo $ viene riconosciuto come carattere facente parte della sintassi dell'espressione regolare, non mi riconosce la variabile che mi interessa.
    Ma la cosa veramente strana è che ha lo stesso comportamento anche il secondo tentativo, quello dove uso una costante.


    Ciaoooooo!

  2. #2
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Prova a utilizzare le doppie virgolette.
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  3. #3
    Guest

    Predefinito

    Stesso risultato.
    La cosa funziona se tra \\1 e la variabile (o costante) ci infilo un altro carattere, anche uno spazio. Non so se può essere utile per capire l'inghippo.


    Ciao!!!!!

  4. #4
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Prova così:
    Codice PHP:
    $var=preg_replace("#(testo){1}(.*)(altrotesto){1}(.*)#","\\1{$IDNUM}\\3\\4",$stringa);
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  5. #5
    Guest

    Predefinito

    Già provato ;)


    Ciao!

  6. #6
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Hai provato questo (con tutte le possibili combinazioni)?
    Codice PHP:
    $testo="\\1{$IDNUM}\\3\\4";
    $var=preg_replace("#(testo){1}(.*)(altrotesto){1}(.*)#",$testo,$stringa);
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  7. #7
    Guest

    Predefinito

    Provato ora, non funziona (nemmeno con le possibili combinazioni) :(

    EDIT: ho scoperto una cosa "interessante", se definisco la costante con una stringa, o cmq non la faccio iniziare con un numero, il tutto funziona. Quindi, di logica, dovrebbe essere un problema di riconoscimento sintassi.... o no?

    EDIT2: ho avuto la conferma, perchè spostando il \\1 dopo la costante, tutta la sostituzione avviene correttamente.
    Ho notato anche che il problema è dovuto dal fatto che il valore della costante (o della variabile) inizia con un numero; infatti questo valore è "1,3458" e ho visto da varie prove che un ulteriore problema è che non mi fa comparire l'1, quindi il risultato inizia con la virgola e poi tutto il resto.


    Ciaoooo!
    Ultima modifica di debug : 22-11-2007 alle ore 12.46.42

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •