Regex multiples correspondance de sous-chaîne

J'ai une application qui détermine, compte tenu d'une expression rationnelle perl, si il faut afficher un menu déroulant ou un simple champ de saisie. Donc, je dois vérifier que l'expression régulière pattern pour une "forme extérieure" et des sous-chaînes. Pour cela, j'ai trouvé plusieurs solutions.

Donné le modèle d'entrée "^(100/500/1000)$", ce qui devrait se traduire dans un menu déroulant avec trois entrées, 100, 500 et 1000. J'ai besoin d'une regex qui parcourt l'ensemble du motif, pour déterminer si c'est une liste valide, et une regex qui effectue la correspondance de sous-chaîne, car je ne sais pas comment faire correspondre une sous-chaîne à plusieurs reprises. C'est mon expression régulière pattern:

^\^\((?:((?:[^\|]|\\\|)+)(?:\||(?:\)$$)))+

Un peu de simplification, puisque cette expression est un peu floue:

^\^\((?:([\w\d]+)(?:\||(?:\)$$)))+

Cela fonctionne, mais seulement les magasins de la dernière sous-chaîne (1000 dans le cas d'espèce) et jette le reste à l'écart, testé avec soit PCRE et en ligne regex outils. Pour obtenir le véritable sous-chaînes, c'est à dire le menu déroulant des champs, j'ai:

(?:\^\()?((?:[^\|]|\\|)+)(?:\||(?:\)$$))

Simplification de nouveau:

(?:\^\()?([\w\d]+)(?:\||(?:\)$$))

Correspond à la sous-chaîne, mais ne correspond pas au menu déroulant modèle de syntaxe qui l'autre regex n' (ce qui correspond à "^(100|" avec les sous-chaîne "100", par exemple).
Ma question est: est-il un moyen de combiner ces expressions régulières pour avoir juste un modèle qui correspond à 1) le modèle de la syntaxe et 2) la sous-chaînes?

Merci d'avance,

Jeremy

P. S.: désolé si c'est évident, mais je suis très peu embrouillé au sujet de toutes ces expressions régulières aujourd'hui.

Des données de l'échantillon:

Entrée regex: ^(100/500/1000)$
Syntax OK!
Appariés sous-chaînes: 100, 500, 1000
=> menu déroulant afficher

Entrée regex: ^[0-9a-fA-F]+$
La syntaxe est incorrecte!
=> show régulier champ de saisie

Entrée regex: ^(foo|bar)$
Syntax OK!
Appariés sous-chaînes: "foo", "bar"
=> menu déroulant afficher

Entrée regex: ^(foo|bar)[0-9]+$
La syntaxe est incorrecte!
=> show régulier champ de saisie

Je ne suis pas sûr de votre question. Pouvez-vous mettre les données de l'échantillon pour ce que vous avez et ce que vous avez besoin de la sortie?
Merci pour votre aide! J'ai ajouté quelques données de l'échantillon.
J'ai mis à jour ma réponse avec les données que vous avez fournies

OriginalL'auteur Jeremy | 2014-08-18