2013-08-20 29 views
16

ho bisogno di un matcher come questo:Impostare due bandiere in Java regex.Pattern

Matcher kuchen = Pattern.compile("gibt es Kuchen in der K\u00FCche",Pattern.CASE_INSENSITIVE).matcher(""); 

e il problema è che non è semplice ASCII. So che in questo caso particolare potrei usare [\ u00FC \ u00DC] per il ü, ma ho bisogno di essere un po 'più generale (costruendo la regex di altri gruppi di matcher). Quindi, secondo javadocs:

Per impostazione predefinita, la corrispondenza case-insensitive presuppone che solo i caratteri nel set di caratteri US-ASCII vengono abbinati. La corrispondenza senza distinzione tra maiuscole e minuscole e Unicode può essere abilitata specificando il flag UNICODE_CASE insieme a questo flag.

Qualcuno può dirmi come specificare le due bandiere in congiunzione?

risposta

26

Prova

Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE 

si dovrebbe risolvere il problema. In alternativa alla maschera di bit si ottengono funzioni composte.

+0

È meglio applicare i flag all'interno del pattern stesso o utilizzare il parametro flag all'interno di compilazione come mostrato nella risposta? – Deco

+0

Usalo come mostrato nella risposta :) –

+0

Il fatto di includerlo nel modello come nella risposta di Joop può contenere degli svantaggi o è puramente una preferenza? Un potenziale pro per includerlo all'interno della stringa Pattern è la trasferibilità. Un mio collega ha riutilizzato una delle mie regex PCRE senza impostare il flag senza distinzione tra maiuscole e minuscole, il che non sarebbe stato un problema se l'avessi incluso all'interno del pattern stesso. – Deco

6

È una maschera di bit, quindi si utilizza l'operatore OR bit a bit |.

7

Utilizzare OR bit a bit, come Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE.

11

Sebbene più puro utilizzando parametri, come "(?iu)gibt es ..." senza parametri. i = senza distinzione tra maiuscole e minuscole, u = unicode.