2010-09-10 7 views
4

J'ai une expression régulière conditionnelle qui fonctionne sur les sites Web de test regex, tels que regexlib.com, mais ne peut pas l'utiliser dans mon application Java.Expression régulière conditionnelle en Java?

Mais, http://www.regular-expressions.info/conditional.html indique que Java ne prend pas en charge les conditionnelles, mais j'ai vu d'autres publications sur SO.

Un exemple de mon expression rationnelle est (?(?=^[0-9])(317866?)|[a-zA-Z0-9]{6}(317866?))

Il doit correspondre à l'une de ces entrées: 317866 ou 317866A12 ou FCF1CS317866

Comment puis-je contourner cette limitation de Java?

TIA

+0

Devrait-il correspondre '31786'? Si non, que fait ce '' 'après le dernier 6? –

Répondre

5

Les expressions conditionnelles ne sont pas pris en charge par java.util.regex.Pattern classe. Pour contourner ce problème, vous pouvez utiliser une bibliothèque d'expressions rationnelles tierce telle que JRegex

1

Pourquoi ne pas le faire à la place?

 
(?:[a-zA-Z0-9]{6})?(317866?) 

Ou si vous savez que la version plus toujours commencer par une lettre, vous pouvez utiliser ceci:

 
(?:[a-zA-Z][a-zA-Z0-9]{5})?(317866?) 

Il va d'abord essayer de faire correspondre 6 caractères alphanumériques suivis par 31786 ou 317866, et si cela échoue, il va alors revenir en arrière et essayer de correspondre 31786 ou 317866.

+0

Merci pour les réponses rapides ... Je ne suis pas vraiment familier avec RegEx et je ne savais pas que cela pourrait être aussi simple. Mes règles métier sont: si elle commence par un alpha, ignorez les 6 premiers, si elle commence par un numérique, commencez la partie depuis le début. Donc, le deuxième exemple semble être plus complet. – RNeuendorff

+0

@RNeuendorff: Le deuxième exemple devrait fonctionner et ne correspondra pas '123456316866', ce que la première expression va correspondre. Je pense que vous voulez le deuxième exemple. –

+0

@Mark Byers: Cette regex n'est pas complètement précise. Je ne veux pas faire correspondre quelque chose comme "AB1363183A23", mais cette regex fait. – RNeuendorff

Questions connexes