2010-10-08 4 views
0

Voici une expression régulière motif (URL) ne correspond pas au groupe nommé:RegEx: Mon expression ne correspond pas à un groupe imbriqué

^/(.+?)/(.+)?(_p(?<Page>\d+))? 

Je ne sais pas pourquoi cela ne fonctionne pas dans le bloc en option :

?()? 

Quel est le problème avec ce modèle et comment puis-je obtenir le résultat correct?

+0

Pouvez-vous envoyer des échantillons de l'entrée et ce que vous attendez à être adapté? Nous ne pouvons pas deviner simplement en regardant l'expression rationnelle. – Oded

+0

par exemple. "/ Directory/File_p2" Je teste les patterns avec un Regex-Lab http://www.mycsharp.de/wbb2/thread.php?threadid=21580 - J'ai beaucoup testé mais je n'ai jamais le bon résultat .. – Beni

Répondre

2

Le 2ème groupe (.+)? est gourmand. Par conséquent, il va correspondre à l'ensemble File_p2. Puisque le troisième groupe est optionnel, il sera simplement ignoré.

Vous pouvez changer l'expression rationnelle

^/([^/]+)/(.+?)(?:_p(?<Page>\d+))?$ 

ou, un peu plus efficace,

^/([^/]+)/([^_]+(?:_[^_]+)*?)(?:_p(?<Page>\d+))?$ 
+0

"/ Directory/File" comme fichier de base et "/ Directory/File_p2" etc ... donc le groupe doit être optionnel – Beni

+0

@Beni: (1) Les noms de fichier comme "foo_bar_p2" seront-ils autorisés? (2) Le répertoire est-il un seul répertoire ou '/ has/a/lot/de/components /'? – kennytm

+0

Il n'y a qu'un répertoire et un fichier dans ce cas (il y a d'autres cas, mais j'en ai besoin d'un comme modèle pour créer les autres). foo_bar_p2 est autorisé (le fichier de base est dans ce cas: foo_bar - par exemple "/ Dir_1/File_1" et "/ Dir_1/File_1_p2" – Beni

Questions connexes