2016-05-23 18 views
5

Voglio scrivere un'espressione regolare in java che accetterà la stringa che ha alfabeti, numeri, e spazio un numero qualsiasi di volte qualsiasi dove.Come scrivere e usare espressioni regolari in java

La stringa deve contenere solo sopra menzionati e nessun altro carattere speciale. Come codificare l'espressione regolare in java?

Ho provato quanto segue, Funziona quando lo eseguo come un'applicazione java.

Ma lo stesso codice quando eseguo l'applicazione Web e accetto i valori tramite XML, accetta "/".

String test1 = null; 

Scanner scan = new Scanner(System.in); 
test1 = scan.nextLine(); 

String alphaExp = "^[a-zA-Z0-9-]*$"; 

Pattern r = Pattern.compile(alphaExp); 
Matcher m = r.matcher(test1); 

boolean flag = m.lookingAt(); 

System.out.println(flag); 

Qualcuno può aiutarmi su questo per favore?

+4

[Non corrisponde per me] (http://ideone.com/GwV5eM). –

+0

Questa è la soluzione giusta per te? – Nidhee

+3

Sì. Ma ancora più importante, è la soluzione corretta secondo * voi *? –

risposta

0

Si può provare a utilizzare classi di caratteri POSIX (vedi here):

Pattern p = Pattern.compile("^[\\p{Alnum}\\p{Space}-]*$"); 
Matcher m = p.matcher("asfsdf 1212sdfsd-gf121sdg5 4s"); 
boolean b = m.lookingAt(); 

Con questa espressione regolare se la stringa si passa contiene altro che caratteri alfanumerici o di spazio che sarà il risultato non può competere.

+0

Grazie, ma io vuoi che contenga '-' (trattino). – Nidhee

+1

L'espressione regolare aggiornata:^[\\ p {Alnum} \\ p {Spazio} -] * $ – perbellinio

+0

@perbellinio Credo che tu possa modificare il tuo post. Se no, dovrei farlo per te? –

0

Credo che tu sia appena manca uno spazio dalla classe di caratteri - dal momento che lei ha citato nel testo ^[a-zA-Z0-9 -]*$

È possibile aggiungere il flag Pattern.MULTILINE troppo in modo da poter specificare come il modello gestisce le linee:

 String alphaExp = "^[a-zA-Z0-9 -]*$"; 

    Pattern r = Pattern.compile(alphaExp, Pattern.MULTILINE); 
    Matcher m = r.matcher(test1); 

    boolean flag = m.lookingAt(); 
0

Prestare attenzione al fatto che * quantifier renderà abbinare a tutto compreso senza partite (0 o più volte, come le linee vuote o gettoni vuote "", infinitamente.

Se si utilizza invece +"[\w\d\s-\]+" abbinerà uno o più (si pensi usando \\ per ogni \ nel codice Java Regex come segue: "[\\w\\d\\s-]+"

Si consideri che * è un operatore di quantità che funziona come {0, } e + opere come {1, }

+0

Poiché è racchiuso tra '^' e '$', il quantificatore '*' ha perfettamente senso. –

+0

Sì, lo fa, ma il suo codice sta prendendo input da uno scanner.nextLine, quindi ogni stringa di input sarà già una singola riga.E usando * corrisponderà anche alle stringhe vuote mentre + no. – Jaumzera

+0

Grazie a @Jaumzera per averlo segnalato. – Nidhee

Problemi correlati