2012-06-28 14 views
6

Qualcuno può aiutarmi a creare un'espressione regolare per le variabili in java in modo che la variabile stringa sia considerata insensibile alle maiuscole e minuscole sostituire ogni singola parola come Access, access, ecc con WINDOWS di qualsiasi cosa del genere?Variabile Case Insensitive per String replaceAll (,) metodo Java

Questo è il codice:

$html=html.replaceAll(label, "WINDOWS"); 

noti che l'etichetta è una variabile stringa.

+4

Perché non aggiungere semplicemente una stringa senza distinzione tra maiuscole e minuscole all'etichetta String? '" (? i) "' –

+0

@pst: scusa, ho sbagliato. Modificato il mio commento. –

+0

Forse anche notare che replaceAll assume come primo argomento ... quindi pubblicarlo come risposta? ;-) –

risposta

23

Basta aggiungere l'opzione "case insensitive" per l'espressione regolare:

html.replaceAll("(?i)"+label, "WINDOWS"); 

Nota: Fare attenzione quando l'etichetta è una regex stessa, ad esempio immaginare l'effetto se l'etichetta era ".*"

+3

C'è una funzione per citare l'etichetta per assicurarsi che sia considerata letterale. 'Pattern.quote()' http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html # citazione (java.lang.String) – nhahtdh

1

Basta usare modelli e fiammiferi. Ecco il codice

Pattern p = Pattern.compile("Your word", Pattern.CASE_INSENSITIVE); 
Matcher m = p.matcher("String containing words"); 
String result = m.replaceAll("Replacement word"); 

L'utilizzo di modelli è facile in quanto non sono case insensitive.

Per ulteriori informazioni, vedere

Matchmaking with regular expressions

Java: Pattern and Matcher

+0

Come mai questo è diverso? str.replaceAll (reg, replacement) è esattamente lo stesso di Pattern.compile (reg) .matcher (str) .replaceAll (replacement) – anttix

+0

L'uso di Matcher non fa distinzione tra maiuscole e minuscole. Vedi l'articolo su javaworld –

+0

@SriHarshaChilakapati "Dipende". Confronta con la risposta di Anttix. –

7

String.replaceAll equivale a creare un matcher e chiamando il suo metodo replaceAll in modo da poter fare qualcosa di simile per renderlo case insensitive:

html = Pattern.compile(label, Pattern.CASE_INSENSITIVE).matcher(html).replaceAll("WINDOWS"); 

See: String.replaceAll e Pattern.compile JavaDocs

+0

C'è un impatto significativo sulla memoria/prestazioni quando si usa la distinzione tra maiuscole e minuscole (in opposizione al metodo replace() sensibile al maiuscolo e minuscolo di Java) per le stringhe grandi? Ad esempio, un documento contenente etichette predefinite (variabili) che possono essere sostituite dinamicamente in base a una logica di app. –

0

credo ma non sono sicuro che si desidera etichetta di essere qualcosa di simile a [Aa][cC][cC][eE][sS][sS]

o in alternativa fare

html = Pattern.compile(lable, Pattern.CASE_INSENSITIVE) 
     .matcher(html).replaceAll("WINDOWS"); 
Problemi correlati