2013-03-26 3 views
0

Regex est correct sauf que x1 est true, alors qu'il doit être true que si avant x est \\d, mais il n'y a pas besoin dans \\d avant '. J'ai besoin chaîne mineure comme number ou 'radius et le plus grand width x height x depth ' radiusImpossible de terminer motif regex

checkField = "x1"; 
String r = "\\d{0,4}(x\\d{1,4}){0,2}('\\d{1,4})?"; 
Pattern p = Pattern.compile(r); 
Matcher m = p.matcher(checkField); 
String a = String.valueOf(m.matches()); 
if (m.matches()) { 
    infoBox(checkField, a); 
} else { 
    errorBox(checkField, a); 
} 

Répondre

1

Je pense que cela devrait fonctionner:

"^(\\d{1,4}(x\\d{1,4}){0,2})?('\\d{1,4})?$" 

L'expression acceptent une chaîne (en option) de la forme AxBxC (avec 1, 2 ou 3 coordonnées) et suivi d'une chaîne optionnelle de la forme 'D.

Étant donné que les deux chaînes sont facultatives, vous devez également vérifier que la chaîne n'est pas vide.

+0

ouais, mais je ne pouvais pas taper '' 1 '' car avant '' '' j'en aurai besoin aussi! –

+1

Je pense que vous devriez donner une explication plus complète de ce que vous voulez réaliser, sinon je peux corriger cela pour faire correspondre aussi '1, mais je pense que ce ne serait pas suffisant. – Teudimundo

+0

J'ai besoin que je peux placer 1 ou toutes les tailles pour l'article - Largeur, taille, profondeur et rayon ... Mais l'article peut être seulement avec la largeur et la taille ('1x1') ou seulement la profondeur (' 1') ou seulement le rayon (''1') donc la chaîne mineure doit être' number' ou '' radius' et la plus grande' largeur x hauteur x profondeur 'rayon' –