Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it L'avatar di JoeP
    Registrato dal
    May 2004
    Messaggi
    558

    [Espressioni regolari] Problema con replace multiplo

    Ciao a tutti,
    ho cominciato da poco a usare le espressioni regolari in PHP.

    Il mio problema è il seguente: supponiamo (in realtà è più complesso quello che faccio, ma il punto è lo stesso) che voglia trasformare la stringa
    primo [secondo] terzo [quarto] quinto [sesto] settimo
    sostituendo tutto il contenuto delle graffe con il testo "X", quindi
    primo [X] terzo [X] quinto [X] settimo

    Ho scritto questo codice:
    Codice PHP:
    eregi_replace('\\[(.+)\\]''[X]'"primo [secondo] terzo [quarto] quinto [sesto] settimo"); 
    L'espressione regolare dice: aperta parentesi quadra (con escape), poi ogni carattere una o più volte, poi chiusa quadra.

    Ma in output da questo
    primo [X] settimo
    perchè (credo) considera la stringa trovata dalla prima quadra aperta all'ultima chiusa, quindi considerando come "ogni carattere una o più volte" anche le quadre tra la prima e l'ultima.

    Come risolvo? Come faccio a dirgli "ogni carattere una o più volte TRANNE la quadra chiusa, tra le quadre"?
    Ho provato con l'espressione '\[([^\]]+)\]' ma non funziona (in pratica tra le parentesi tonde c'è una classe di caratteri che esclude la quadra chiusa, con escape: [^\]] )!!! Come faccio?

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    codice:
    echo preg_replace("#\[.*\]#U",'[x]',$stringa);

  3. #3
    Utente di HTML.it L'avatar di JoeP
    Registrato dal
    May 2004
    Messaggi
    558
    Originariamente inviato da nicola75ss
    codice:
    echo preg_replace("#\[.*\]#U",'[x]',$stringa);
    Questa però è una espressione regolare Perl, io invece volevo usarne una POSIX, dato che ho imparato ad usare quest'ultime. Non si può fare?

  4. #4
    Utente di HTML.it L'avatar di JoeP
    Registrato dal
    May 2004
    Messaggi
    558
    up

  5. #5
    prova così:

    Codice PHP:
    eregi_replace('\[[a-z]+\]''[X]'"primo [secondo] terzo [quarto] quinto [sesto] settimo"); 

  6. #6
    Utente di HTML.it L'avatar di JoeP
    Registrato dal
    May 2004
    Messaggi
    558
    Originariamente inviato da StefanoV
    prova così:
    Codice PHP:
    eregi_replace('\[[a-z]+\]''[X]'"primo [secondo] terzo [quarto] quinto [sesto] settimo"); 
    beh, così funziona sono con lettere nelle quadre... se io volessi tutti i caratteri eccetto le quadre?

  7. #7
    La tua regex è corretta* ma se non metti un punto interrogativo dopo il segno + per forza di cosa, se nel testo compaiono altre parentesi quadre ], si fermerà all'ultima e non alla prima.

    \[.+?\]



    *salvo non ci siano dei ritorni accapo all'interno delle parentesi quadre

  8. #8
    Utente di HTML.it L'avatar di JoeP
    Registrato dal
    May 2004
    Messaggi
    558
    Originariamente inviato da css
    La tua regex è corretta* ma se non metti un punto interrogativo dopo il segno + per forza di cosa, se nel testo compaiono altre parentesi quadre ], si fermerà all'ultima e non alla prima.
    \[.+?\]
    *salvo non ci siano dei ritorni accapo all'interno delle parentesi quadre
    Grazie della risposta (no, non ci sono a capo), ma il ? non serve a dire "zero o una occorrenza"? Quindi l'espressione che mi hai scritto dice:
    quadra aperta, poi qualsiasi carattere una o più volte, zero o più volte, infine chiusa quadra
    Non mi è chiarissimo, scusa se ti chiedo spiegazioni, ma dato che è la prima volta che cerco di usarle...

  9. #9
    Come ha scritto css a me da un Warning: REG_BADRPT

  10. #10
    Utente di HTML.it L'avatar di JoeP
    Registrato dal
    May 2004
    Messaggi
    558
    Originariamente inviato da StefanoV
    Come ha scritto css a me da un Warning: REG_BADRPT
    Io non ho ancora provato, sembrava così sicuro di sè che mi sono fidato...
    Forse ti da un errore perchè css non hai messo la parte da sostituire tra parentesi quadre (ho tralasciato di scriverlo, tanto il problema non era quello).

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.