2011-01-09 4 views
0

J'ai les chaînes suivantes dans mon application.RegEx pour exclure une chaîne

/admin/stylesheets/11 

/admin/javascripts/11 

/contactus 

ce que je veux faire est d'écrire une expression régulière pour capturer tout autre que chaîne commençant par « admin »

essentiellement mon regex devrait capturer seulement

/contactus 

en excluant les deux

/admin/stylesheets/11 

/admin/javascripts/11 

pour capturer tout ce que j'ai écrit

/.+/ 

et j'ai écrit /(admin).+/ qui capture tout commence par 'admin'. comment puis-je faire l'inverse. Je veux dire obtenir tout ce que ne commence pas par 'admin'

grâce à l'avance

acclamations

sameera

EDIT - Merci pour toutes les réponses

J'utilise ruby ​​/ Rails3 et essayer de mapper un itinéraire dans mon fichier routes.rb

Mon fichier de routes d'origine est comme suit

match '/:all' => 'page#index', :constraints => { :all => /.+/ } 

et je veux le RegEx pour remplacer

/.+/

grâce

+2

Quelle implémentation de langue/expression régulière utilisez-vous? – Gumbo

+1

Est-ce tout ce que l'expression régulière est en train de faire? Si c'est le cas, il vaut mieux chercher une fonction intégrée comme 'string.beginswith()'. – marcog

Répondre

4

Si la langue/mise en œuvre régulière d'expression que vous utilisez supporte look-ahead assertions, vous pouvez le faire:

^/(?!admin/).+/ 

Sinon, si vous ne pouvez utiliser que la syntaxe de base, vous devrez faire quelque chose comme ceci:

^/([^a].*|a($|[^d].*|d($|[^m].*|m($|[^i].*|i($|[^n].*))))) 
+0

Déplacez le '/' avant le '^'? – marcog

+0

@marcog: Cela dépend de l'implémentation de la langue/expression régulière si des délimiteurs comme '/' sont requis. – Gumbo

+1

Désolé, j'ai mal interprété les '/' en tant que délimiteurs regex. Relisez la question et cela a du sens maintenant. +1 – marcog