Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Regex, come utilizzare sequenza di escape

    Salve a tutti,

    sto giochiacchiando con le java.util.Regex di java....

    In particolare stavo cercando un link all'interno del codice html :


    il pattern è circa : <a href="?variabile=1561615"> .....

    In particolare io ho bisogno della stringa : ?variabile=1561615

    il problema è che il punto interrgativo (?) è un quantificatore. Quindi c'è bisogno di usare la sequenza di escape per trattarlo come un carattere normale.

    Ho letto e spulciato i tutorial sul sito ufficiale ma mi trovo in difficoltà.

    Infatti riesco a cercare la stringa ma mi omette il punto interrogativo ?.

    Ecco come effettuo la ricerca :
    java.util.regex.Pattern.compile("/?newdid=.*?\"", java.util.regex.Pattern.CASE_INSENSITIVE);


    La prima volta uso il black-slash al punto interrogativo per non utilizzare il carattere punto interrogativo come quantificatore, ma poi nella ricerca lo omette dandomi un risultato del tipo :

    variabile=1561615 ...


    Ok, posso ovviare aggiungendo a mano ma vorrei sapere come si fa a fargli ricercare anche il punto interrogativo??


    Come posso risolvere ??

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    502
    Non conosco e non uso le regex, ma non è che il back-slash devi farlo con "\\" essendo un carattere speciale?

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Regex, come utilizzare sequenza di escape

    Originariamente inviato da JavaFurbix46
    Ok, posso ovviare aggiungendo a mano ma vorrei sapere come si fa a fargli ricercare anche il punto interrogativo??
    Il ? è un carattere "speciale" nelle regex. Quindi nella regex si deve usare \?
    Dal momento che la regex l'hai espressa in una stringa "literal" nel sorgente, il \ è a sua volta speciale. Quindi ".... \\? ...."
    E questo, ricordalo, vale in generale.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    No, il doppio blackslah \\ equivale al singolo carattere \

  5. #5
    Scusa, la risposta di prima era per rubox...

    Ah, ecco il perchè eclipse mi dava già errore. Grazie , che sbadato, non ci avevo proprio pensato!

    Funziona.




    Però avrei da chiederti anche questo :

    ho provato così :

    :-(
    codice:
    \Q?\Evariabile=.*?\""
    e mi dava cmq errore, come mai ??

    literal sta per ?? Scusa la mia NON conoscenza ...

    E potevo costruire la regex evitando di inserire il pattern di ricerca in una stringa?
    (non credo ci siano alternative a come ho fatto io..)

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    502
    Originariamente inviato da JavaFurbix46
    Scusa, la risposta di prima era per rubox...
    Appunto... a te non serviva un "vero" back-slash e quindi un "\\" per la tua regex?

  7. #7
    Originariamente inviato da JavaFurbix46
    Scusa, la risposta di prima era per rubox...

    Ah, ecco il perchè eclipse mi dava già errore. Grazie , che sbadato, non ci avevo proprio pensato!

    Funziona.




    Però avrei da chiederti anche questo :

    ho provato così :

    :-(
    codice:
    \Q?\Evariabile=.*?\""
    e mi dava cmq errore, come mai ??

    literal sta per ?? Scusa la mia NON conoscenza ...
    Hai ragione , non ci avevo pensato che avevo bisogno di un black slash più il carattere che intendevo usarlo come un NON metacarattere.

    Grazie anche a te

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da JavaFurbix46
    literal sta per ??
    "letterale" ... nel sorgente è la rappresentazione di una costante di un qualche tipo es. 123 o "pippo".

    E comunque, per le espressioni regolari in generale pensa sempre prima solo alla regex, poi successivamente pensa se devi metterla in una stringa literal nel sorgente. E allora in tal caso raddoppia i backslash: \ ---> \\
    Tutto qui.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Ok, grazie !

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.