2015-05-06 29 views
6

Sono nuovo di regex passando attraverso il tutorial Ho trovato il regex [...] dice Matches any single character in brackets.. Così ho provatoQual è il significato di [...] regex?

System.out.println(Pattern.matches("[...]","[l]")); 

Ho anche provato la fuga parentesi

System.out.println(Pattern.matches("[...]","\\[l\\]")); 

ma mi dà false mi aspettavo true perché l è parentesi all'interno.

Sarebbe utile se qualcuno chiarisse i miei dubbi.

+2

Le parentesi non sarà una parte di match.If si desidera abbinare ' [l] 'usa' \\ [l \\] ' – vks

+0

Inoltre: ... si aspetta tre caratteri. – Stultuske

+4

@Stultuske non si aspetta caratteri '3' ........ dice solo uno di loro che è lo stesso qui però – vks

risposta

4

personaggi che si trovano all'interno [ e ] (chiamato un character class) sono trattati come una serie di personaggi tra cui scegliere, ad eccezione leader^ che nega il risultato e - che significa gamma (se è tra due caratteri). Esempi:

  • [-123] partite -, 1, 2 o 3
  • [1-3] corrisponde una sola cifra nell'intervallo da 1 a 3
  • [^1-3] qualsiasi carattere tranne qualsiasi cifre nella gamma da 1 a 3
  • . corrisponde a qualsiasi carattere
  • [.] corrisponde il punto .

Se si desidera far corrispondere alla stringa [l] si dovrebbe cambiare la vostra regex per:

System.out.println(Pattern.matches("...", "[l]")); 

Ora la stampa true.

Il regex [...] equivale alle espressioni regolari \. e [.].

+0

@timpietzcker - rende le mie risposte un aspetto migliore :) – Maroun

+0

Penso che * Alan * abbia ragione .. L'OP sa cosa '[...]' significa .. Quindi, la tua risposta è * più corretta *. Probabilmente dovrebbe esaminare * regex in profondità * :) – TheLostMind

+0

@TheLostMind Il tutorial dovrebbe utilizzare un segnaposto migliore di questo, è molto confuso per i nuovi arrivati. – Maroun

4

Il tutorial è un po 'fuorviante, si dice:

[...] Corrisponde a qualsiasi singolo carattere tra parentesi.

Tuttavia, ciò significa che la regex corrisponderà a un singolo carattere contro uno qualsiasi dei caratteri all'interno delle parentesi. Il ... significa "inserisci i caratteri che vuoi abbinare qui". Quindi è necessario sostituire il ... con i personaggi con cui si desidera confrontare.

Ad esempio, [AP]M corrisponderà a "AM" e "PM".

Se la tua espressione regolare è letteralmente [...], corrisponderà a un punto letterale. Nota che non c'è nessun punto che ripeta i caratteri all'interno delle parentesi.

2

Il tutorial dice:

Corrisponde a qualsiasi singolo carattere tra parentesi.

Significa sostituire ... con un singolo carattere, per esempio [l]

Questi saranno stampati vero:

System.out.println(Pattern.matches("[l]","l")); 
System.out.println(Pattern.matches("[.]",".")); 
System.out.println(Pattern.matches("[.]*",".")); 
System.out.println(Pattern.matches("[.]*","......")); 
System.out.println(Pattern.matches("[.]+","......")); 
+1

'[...]' è un'espressione regolare valida. Può * essere * semplificato a '[.]', Ma è sicuramente valido. – Maroun

+0

corretto, grazie – jaypi

+0

@ MarounMaroun, ho pensato che stesse cercando di dire quello che ho detto nel mio (ora cancellato) commento: che non stanno parlando della regex reale '[...]'. La risposta è ancora un po 'confusa, però. Penso che sia meglio eliminare completamente i punti e utilizzare esempi realistici come quelli nella tua risposta. –