2011-11-04 3 views
0

Je dois créer un motif regex qui correspond à toutes les URL contenant String1 mais pas String2. Le problème est qu'une URL peut contenir à la fois String1 et String2. Par exemple, si vous explorez un site de commerce électronique, je veux collecter les pages du catalogue sans obtenir les URL du produit.Expression Regex qui correspond aux URL si elle contient un motif mais pas un autre

Exemple URL de catalogue: http://www.domain.com/catalog/name String1: catalogue

Exemple URL produit: http://www.domain.com/catalog/name/product/id => String2: produit

En utilisant les ci-dessus URL l'échantillons, String1 est "produit" "catalogue" et String2 est. Mon modèle actuel pour obtenir les URL de catalogue est \/catalog(?:\/[\w-\/]*)?$

Comment puis-je étendre ce modèle pour ignorer toutes les URL avec String2?

+2

Le plus simple est de simplement utiliser deux expressions. obtenir vos URL dans le premier. dans la seconde, voyez si "product" est une sous-chaîne de l'URL et si c'est le cas, ne l'utilisez pas. –

+0

Merci @aleph_null mais j'ai pu le faire fonctionner en utilisant \/catalog (?: \/[\ W -] *)? (?!. * \/Product \ /) ' Il correspond à"/catalogue "et éventuellement toute partie de l'URL qui satisfait un caractère alphanumérique ou un trait d'union sauf s'il est suivi de"/product/". –

Répondre

0

Je suppose que vous êtes à la recherche d'un negative look ahead

Par exemple, cette regex:

catalog\/name\/(?!product) 

Matches (example):

http://www.domain.com/catalog/name/produc/id 

Cependant, il ne correspond pas à (example):

http://www.domain.com/catalog/name/product/id 

Espérons que cela aide!

Questions connexes