2010-01-13 7 views
0

Voici mon problème regex: Comment puis-je sélectionner tous les résultats avec un certain ID, par exemple. "... ID = 99" mais excluant les résultats en comptant avec un nombre supplémentaire comme ID = "990" ou "ID = 9923". Toutefois, si la chaîne compte avec un autre caractère non numérique ("&"), par ex. "... ID = 99 & PARAM = 9290" il devrait également être inclus.problème regex - sélectionnez les résultats par ID

Je suis totalement confus en le transformant en une sélection regex. J'apprécierais n'importe quelle idée sur ceci beaucoup!

(. En passant, si vous êtes vraiment dans regex comment avez-vous appris des ressources recommandées, des livres, des tutoriels?)

Note: J'utilise ceci pour filtrer les résultats de recherche dans Google Analytics que vous pouvez utilise regex dans le formulaire "Page de filtre". Peut-être que c'est une information utile pour vous.

+0

est-ce qu'on parle de paramètres d'URL? –

+0

@Dave: quelle fonction de chaîne utiliseriez-vous pour faire correspondre "ID = 99" tant qu'il n'est pas suivi d'un autre chiffre? On dirait un travail pour regex pour moi. –

+0

@Alan: Vous avez raison; Je ne pensais pas clairement. Merci pour la correction. Suppression d'un commentaire inutile ... –

Répondre

1

Répondre à la deuxième partie de votre question:

En ce qui concerne les livres sont concernés, Regular Expression Cookbook par O'Reilly est fantastique. Les premiers chapitres couvrent à peu près toutes les bases, et puis certains. Le reste du livre est des exemples concrets.

0

Ceci correspond à ID = 99 et ID = 99 suivi d'un seul caractère non numérique.

ID=99(:?\D)? 

Si 99 était juste un exemple et que vous voulez faire correspondre les deux chiffres, vous pouvez utiliser:

ID=\d{2}(:?\D)? 
+0

Ne fonctionnera pas, même si vous corrigez la syntaxe. '(?: \ D)?' Correspond éventuellement à un non-chiffre, mais il n'empêche pas * une correspondance si le caractère suivant ** est ** un chiffre (ce que veut l'OP). –

1
ID=99(?!\d) 

(?!\d) est un negative lookahead; il affirme que soit le caractère suivant n'est pas un chiffre ou il n'y a pas de caractère suivant. Vous n'avez pas dit quelle est la saveur regex que vous utilisez, mais la plupart des saveurs dites compatibles Perl supportent les lookaheads.

En ce qui concerne les ressources d'apprentissage, le tutoriel au regular-expressions.info est un excellent point de départ. Pour l'étude avancée, le livre de Goyvaerts-Levithan recommandé par d'autres est excellent, mais Mastering Regular Expressions est toujours le meilleur. Obtenez les deux si vous pouvez vous les permettre; vous ne le regretterez pas.

EDIT: Pour être du bon côté, vous pouvez utiliser \bID=99(?!\d) pour éviter de faire correspondre quelque chose comme FOO_ID=99.

Questions connexes