2010-10-08 3 views
0

следующее регулярное выражение (URL) шаблон не соответствует имени группы:RegEx: Мой Expression не соответствует вложенной группе

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

Я не знаю, почему это не работает в блоке дополнительного :

?()? 

В чем проблема с этим шаблоном и как я могу получить правильный результат?

+0

Вы можете разместить образцы входных и то, что вы ожидаете быть согласованы? Мы не можем догадываться, просто глядя на регулярное выражение. – Oded

+0

, например. «/ Directory/File_p2» Я тестирую шаблоны с помощью Regex-Lab http://www.mycsharp.de/wbb2/thread.php?threadid=21580 - я тестировал много, но я никогда не получаю правильный результат. – Beni

ответ

2

Вторая группа (.+)? жадная. Поэтому он будет соответствовать целому File_p2. Поскольку 3-я группа не является обязательной, она просто будет пропущена.

Вы можете изменить регулярное выражение для

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

или, чуть более эффективно,

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

«/ Directory/File» в качестве базового файла и «/ Directory/File_p2» и т. Д., Поэтому группа должна быть необязательной. – Beni

+0

@Beni: (1) Разрешены ли имена файлов, такие как 'foo_bar_p2'? (2) Является ли каталог единственным каталогом или '/ has/a/lot/of/components /'? – kennytm

+0

В этом случае есть только один каталог и один файл (есть и другие случаи, но мне нужен один шаблон для создания других). foo_bar_p2 разрешен (базовый файл в этом случае: foo_bar - например, "/ Dir_1/File_1" и "/ Dir_1/File_1_p2" – Beni

Смежные вопросы