Faire correspondre une chaîne à plusieurs modèles d'expressions régulières
J'ai une chaîne d'entrée.
Je pense à la façon de correspondre à cette chaîne de contre plus d'une expression régulière efficacement.
Example Input: ABCD
J'aimerais match contre ces reg-ex les modèles, et le retour true
si au moins l'un d'entre eux correspond à:
[a-zA-Z]{3}
^[^\\d].*
([\\w&&[^b]])*
Je ne suis pas sûr de la façon de correspondre à l'encontre de plusieurs modèles à la fois. Peut-on me dire comment le faire efficacement?
source d'informationauteur Patan
Vous devez vous connecter pour publier un commentaire.
Si vous avez quelques regexes, et ils sont tous connus au moment de la compilation, cela peut être suffisant:
Si il y en a plus, ou qu'ils sont chargés lors de l'exécution, puis utiliser une liste de modèles:
vous pouvez faire une grande regex de l'individu:
Je ne suis pas sûr de ce que
effectively
moyens, mais si c'est au sujet de la performance et que vous voulez vérifier beaucoup de chaînes, j'irais pour ceJe ne suis pas sûr de savoir comment il va affecter les performances, mais la combinaison de tous dans une regexp avec
|
pourrait aussi aider.Pour éviter de recréer des instances de Pattern et Matcher de classes, vous pouvez créer un de chaque et de les réutiliser. Pour réutiliser
Matcher
classe, vous pouvez utiliserreset(newInput)
méthode.Avertissement: Cette approche n'est pas thread-safe. Utiliser seulement quand vous pouvez garantir qu'un seul thread sera en mesure d'utiliser cette méthode, autrement créer une instance distincte de Matcher pour chacune des méthodes d'appel.
C'est l'un des possible des exemples de code
Voici une alternative.
Notez qu'une chose ce n'est pas faire est de retour dans un ordre spécifique. Mais on pourrait le faire par le tri par fusion.start() par exemple.
...
comme il a été expliqué dans ( L'exécution de plusieurs modèles regex sur la Chaîne ), il est préférable pour concaténer chaque regex pour un grand regex et que de courir le matcher un seul. C'est une grande amélioration est vous souvent la réutilisation de l'expression rationnelle.