2013-05-26 4 views
8

Ho bisogno di usare espressioni regolari, per verificare se una stringa inizia con un virgolette doppie carattere (") e termina con una doppi apici carattere troppo.Come rappresentare il carattere virgolette (") in regex?

Il problema è che non posso utilizzare un virgolette doppie carattere, perche 'si confonde. c'è qualche altro modo per rappresentare un virgolette carattere " in regex, o nella stringa in generale?

String s = """; // ? 
+2

possibile duplicato di [Come inserire le virgolette in una stringa?] (Http://stackoverflow.com/questions/3559063/how-to-enter-quotes-in-a-string) o [Java, escape (utilizzando) citazioni in un'espressione regolare] (http://stackoverflow.com/questions/6398365/java-escaping-using-quotes-in-a-regex) o ... –

risposta

17

In primo luogo, il carattere doppio apice è niente di speciale in regex - è solo un altro personaggio, quindi non ha bisogno di fuggire dal punto di vista regex.

Tuttavia, poiché java utilizza virgolette per delimitare costanti stringa, se si desidera creare una stringa in java con una virgoletta doppia, è necessario sfuggire a esse.

Questo codice metterà alla prova se la stringa corrisponde:

if (str.matches("\".*\"")) { 
    // this string starts and end with a double quote 
} 

Si noti che non è necessario aggiungere all'inizio e alla fine di marcatori di ingresso (^ e $) nella regex, perché matches() richiede che l'intero input corrisponde a restituire true - ^ e $ sono impliciti.

+0

Uno divertente per abbinare il contenuto tra virgolette che io uso spesso per le proprietà nei tag xml è '" [^ "] *" '(o, come stringa java con escape,' "\" [^ \ "] * \" "'). Impossibile da dissanguare;) – Nyerguds

8

è necessario utilizzare il backslash prima ". come \"

Dal doc here si può vedere che

Un personaggio preceduto da una barra rovesciata (\) è una sequenza di escape e ha un significato speciale per il compilatore.

e "(doppio apice) è una sequenza escacpe

Quando si incontra una sequenza di escape in un comunicato stampa, il compilatore interpreta di conseguenza. Per esempio, se si vuole mettere le citazioni tra virgolette è necessario usa la sequenza di escape, \ ", nelle virgolette interne. Per stampare la frase

Ha detto "Ciao!" per me.

si può scrivere

System.out.println ("Ha detto \" Ciao \ "per me."!);