2009-07-15 7 views
1

Je travaille sur ce bit de code qui vérifie une ligne de code ActionScript 3 pour l'existence d'un type (MovieClip, Sprite, ainsi que les classes personnalisées définies dans le classpath) qui se trouve dans une collection qui est être itéré.Java Regex Problème

for (String type: typeList) { 
    if (input.contains(type)) { 
     // dome something here 
    } 
} 

Le problème est, quelques-uns des noms de type personnalisé contiennent également le nom d'un autre type:

Custom type: fSceneController 
Contains flash type: Scene 

Ainsi, la méthode .contains ne fonctionnera pas correctement. Je pensais utiliser une regex à l'intérieur de la boucle où le modèle vérifie le type et vérifie qu'il n'y a pas d'a-zA-Z0-9 juste avant ou après le type.

Pattern p = Pattern.compile("<stuff here>"+ type + "<more stuff here>"); 

Quelqu'un peut-il me aider à déterminer ce que je dois mettre avant et après le type de sorte que le type lui-même peut être détectée distinctement des autres types qui peuvent contenir une partie du texte? Ou peut-être suggérer une méthode différente que je peux utiliser pour atteindre le même objectif?

Répondre

6

Je ne sais pas, je suis clair sur ce que vous essayez de faire, mais je pense que c'est ce que vous manquez

Si vous voulez un mot dans une expression régulière et juste le mot, puis mettre \ b à l'avant et à l'arrière, par exemple

\bhe\b will only match the first of... 

he 
she 
the 
they 
+0

wow je ne peux pas croire qu'il était aussi simple que cela. la puissance de regex ne connaît pas de limites. –

+1

cool, heureux d'entendre que c'était le problème. Je pense que le \ b représente la limite. Il gère correctement la ponctuation. –

+0

juste pour donner un peu de contexte, je suis en train d'écrire un actionscript 3 à haxe traducteur. faire aux différentes façons dont les langues manipulent les types et les importations, tous les types utilisés dans une classe doivent être détectés pour que les instructions d'importation puissent être étendues (haxe ne supporte pas les importations génériques), donc le problème original où d'autres types étaient détectés et importés qui n'étaient pas réellement utilisés. –

-1

Vous pourriez être en mesure de vérifier la longueur et, comme celui-ci

for(String type : typeList) 
    if(input.contains(type) && input.length() == type.length()) 
     System.out.println("Found " + type); 
+0

qui ne fonctionnera pas car la longueur d'entrée pourrait être beaucoup plus élevée que la longueur du type recherché. Tout le problème est que le type est mélangé avec un tas d'autres textes et doit être détecté distinctement d'autres textes et de tous les autres types connus. –

+0

Oh oui - juste complètement lu sur ce petit problème. –