Emulare il LIKE SQL con una regex in java

di erik992 il
4 risposte
Salve, volevo un suggerimento su come emulare il like sql in java attraverso una regex.
Ad esempio:
Supponiamo che voglio matchare la stringa "Pippo" io vorrei che il match risulti vero se confronto con Pippo, "p", "pip", "i", "o", "pp", "PIPPO", ecc..
Risulti falso invece se confronto, "r", "PIPPOS", "pips", "d", ecc...
Proprio come un like sql facendo l'uppercase ogni volta del campo del database e del campo con cui confrontarlo.
Potreste darmi una mano?
Grazie.

4 Risposte

  • erik992 ha scritto:


    vorrei che il match risulti vero se confronto con Pippo, "p", "pip", "i", "o", "pp", "PIPPO", ecc..
    Ma questo NON è un like .... cosa c'entra es. "pp" ??
  • Se si fa in sql "LIKE '%pp%'" il confronto è positivo.
    Grazie
  • erik992 ha scritto:


    Se si fa in sql "LIKE '%pp%'" il confronto è positivo.
    Non era chiaro il senso ... potevi dirlo prima.
    String str = "Pippo";     // o "pippo" o "PIPPO" o "PiPpO" ecc...
    
    boolean match = str.matches("(?i).*pp.*");
    Il (?i) è per attivare il flag case-insensitive. Se devi eseguirlo 1 volta sola va bene il matches che ho scritto. Se devi ripeterlo molte volte conviene creare il java.util.regex.Pattern e ri-usarlo.

    P.S. per come l'ho scritto non è molto efficiente se la stringa fosse molto lunga, perché .* è "greedy".
  • Si forse non ero stato chiarissimo. Grazie mille
Devi accedere o registrarti per scrivere nel forum
4 risposte