2008-12-02 13 views
0

J'ai une longue regex dans AS3/Flex qui trouve l'une des quelques dizaines de mots. La Regex ressemble à: word | wordup | wordly | wordstercorrespond à 'undefined' dans AS3 RegExp? Hein?

quand je fais "wordup wordster!". Match (regex) Je reçois maches indéfini! le tableau de correspondance qui est retourné a matches: [0] 'wordup' [1] non définie longueur du tableau : 2

Y at-il un bug connu dans le groupe de AS3 correspond? Qu'est-ce qui pourrait faire apparaître certains mots dans le tableau de résultats retourné, et d'autres qui reviendraient comme undefind?

J'ai recherché des caractères incorrects dans mon expression régulière et j'ai inspecté plusieurs fois l'expression régulière.

Si je recherche simplement 'wordup', alors j'obtiens une longueur de tableau de correspondance 1, avec le contenu correct. Si je ne recherche que 'wordster', alors j'obtiens un tableau de longueur dont les correspondances [0] ne sont pas définies à nouveau.

------ ------- mise à jour

Après beaucoup d'expérimentation ... mon expression régulière était trop longue pour AS3 Mon expression régulière réelle de regroupement utilisé, et avait entre parenthèses en option :

(: ((\ Bword \ b)) | ((\ bwordup \ b)) | ... et ainsi de suite pour 51 mots

simplificatrices:?? (.? : \ bword \ b | \ bwordup \ b |

en quelque sorte fait que les groupes de correspondance fonctionnent très bien, e Même si je n'ai pas de parenthèse qui serait normalement nécessaire pour définir les groupes ...

Répondre

3

Lorsque vous avez affaire à des problèmes de "mystère", vous devriez toujours montrer votre code actuel, pas quelque chose que vous pensez être équivalent. mot | wordup | wordly | wordter ne vous donnera aucun résultat "indéfini".

Au lieu d'utiliser (: \ Bword \ b | \ bword2 \ b), utilisez ceci: \ b (: mot | mot2)? \ B

Le mot regex | (mot2) | mot3 sera vous donner des correspondances de longueur nulle, parce que la deuxième alternative dans la regex est facultative. Il correspondra à la chaîne de longueur zéro à chaque position dans la chaîne où "mot" ne peut pas correspondre.