Comment faire correspondre, mais pas de capture, partie d'une regex?

J'ai une liste de chaînes de caractères. Certains d'entre eux sont de la forme 123-...456. La partie variable "..." peut être:

  • la chaîne "apple" suivi d'un tiret, par exemple 123-apple-456
  • la chaîne "banane" suivi d'un tiret, par exemple 123-banana-456
  • une chaîne vide, par exemple 123-456 (remarque il n'y a qu'un trait d'union)

Un mot autre que "apple" ou "banane" n'est pas valide.

Pour ces trois cas, je voudrais correspondre à "apple", "banane", et "", respectivement. Notez que je ne veux plus jamais capture le trait d'union, mais je veux toujours match il. Si la chaîne n'est pas de la forme 123-...456 comme décrit ci-dessus, alors il n'y a aucune correspondance.

Comment puis-je écrire une expression régulière pour ce faire? Supposons que j'ai une saveur qui permet d'anticipation, lookbehind, lookaround, et non de capturer les groupes.


L'observation essentielle ici est que lorsque vous avez "apple" ou "banane", vous doit également avoir de fin du trait d'union, mais vous ne voulez pas pour le match. Et quand vous êtes correspondant à la chaîne vide, vous ne doit pas avoir de fin du trait d'union. Une regex qui encapsule cette affirmation sera la bonne, je pense.

  • Vous voulez correspondre à tout, sauf pour les traits d'union?
InformationsquelleAutor David Stone | 2010-10-13