2009-01-28 8 views
-1

J'ai besoin d'aide avec regex.Aide sur les modèles Regex

  1. J'ai un modèle AB. *, Ce modèle doit correspondre à des chaînes comme AB.CD AB.CDX (AB.whatever) .Et si on..But il ne devrait pas correspondre chaînes comme AB , AB.CD.CD, AB.CD. AB.CD.CD, c'est-à-dire, s'il rencontre un deuxième point dans la chaîne. quelle est la regex pour cela?

  2. J'ai un modèle AB. **, ce modèle doit correspondre à des chaînes comme AB, AB.CD.CD, AB.CD. AB.CD.CD mais pas chaînes comme AB.CD, AB.CDX, AB.quelque ce soit le regex pour cela?

Merci beaucoup.

+0

Clarifiez votre utilisation. et s'il vous plaît; ils sont spéciaux dans les expressions rationnelles, mais il semble que vous vouliez faire correspondre des périodes et vous utilisez simplement() dans vos exemples comme délimiteur. Est-ce correct? –

+0

oui c'est correct. –

+0

désolé pas délimiteurs, mais simplement des exemples .. vous pouvez les considérer comme AB, AB.CD.CD, AB. CD, AB. CD.CD –

Répondre

2

On dirait que vous avez des globs et non des expressions régulières. Dot correspond à n'importe quel caractère, et * fait correspondre l'élément précédent à 0+ fois. Echappez du premier point pour qu'il corresponde à un point littéral, puis faites correspondre n'importe quel caractère autre qu'un point, autant de fois que vous le souhaitez.

2) "^(AB)|(AB\.[^.]*\.[^.]*$" Cela correspond AB ou AB suivie .<stuff>.<stuff>

+0

J'ai essayé avec des globs, mais cela donne aussi vrai pour les deux cas AB. * Et AB. ** pour toute chaîne correspondant AB.quelque chose, Mais mes exigences sont quelque peu raffinées pour * et ** –

1

Si votre moteur regex supporte préanalyse négative, vous pouvez essayer quelque chose comme:

^AB\.[^.]+$ 
^AB(?!\.[^.]+$) 

(. Ou

^AB\.[^.]*$ 
^AB(?!\.[^.]*$) 

si vous souhaitez autoriser AB)

0

Je ne trouve pas votre question est entièrement claire; s'il vous plaît commentez ici (ou éditez votre question si vous ne pouvez pas ajouter des commentaires) si je me trompe mais que je pense que vous cherchez est:

1) assortissant des chaînes "AB.AnyTextHereWithoutDots" mais pas " AB "ou" AB.foo. " etc

Si donc une expression régulière correspondant serait:

"^AB\.[^.]*$" 

2) correspondant à « AB » ou « AB.something.something » avec aucune ou deux ou plusieurs points

Si donc un correspondant regex serait quelque chose comme:

"^AB(\..*\..*)?$" or "'^AB\(\..*\..*\)\?" (depending on the nature of your regex engine) 

comme Douglas suggests correspondant à Globs serait probablement plus facile.

Et en tant que spdenne suggests, trouvez une bonne référence regex.

0

J'ai essayé ceci dans vim.Voici les données de l'échantillon:

AB.CD 
AB.CDX 
AB.whatever 
AB 
AB.CD.CD 
AB.CD. 
AB.CD.CD 

Voici mes regexes

  1. Cette capture toutes les lignes commençant par AB et attend ensuite un point littéral, puis filtre toutes les lignes qui a un second point.

    ^AB \. [^.] *

    $
  2. Cette capture toutes les lignes qui est juste un AB (la partie avant du tuyau) ou les lignes commençant par AB qui est suivi par deux points littérales (se sont échappés avec une barre oblique inverse)

    ^AB $ \ |^AB \ .. \ .. $