RegEx для всех файлов, кроме черного списка

Мне нужно изменить шаблон RegEx. В настоящее время у меня есть это, которое соответствует всем файлам, оканчивающимся на .aspx, включая строку запроса:

.*\.aspx.*

Мне нужно выражение, которое соответствует всем, кроме foo.aspx или bar.aspx.

Вот несколько тестовых строк; плохой:

foo.aspx
http:\\www.mycompany.com\foo.aspx
http:\\www.mycompany.com\_app\bar.aspx?param=1

...и хорошо:

http:\\www.mycompany.com\default.aspx
http:\\www.mycompany.com\_app\index.aspx?param=1
index.aspx


person Matthew McDermott    schedule 20.02.2011    source источник
comment
То, что вы сделали, соответствует этому: myfile.aspx.bak, вы знаете? Какой язык вы используете для регулярного выражения?   -  person xanatos    schedule 20.02.2011
comment
Я точно не знаю, что это за язык, я предполагаю, что это язык .Net, поскольку он взят из файла конфигурации для Microsoft UAG Server.   -  person Matthew McDermott    schedule 20.02.2011
comment
Разве у вас не может быть что-то вроде if (!preg_match('/\.aspx$/', ...))? Это бы сильно облегчило задачу.   -  person user611775    schedule 20.02.2011
comment
@ user611775 это регулярное выражение? Похоже, это не так.   -  person Matthew McDermott    schedule 20.02.2011


Ответы (1)


On C#

var rx = new Regex(@"^.*(?<!(^|\\|/)(foo|bar))\.aspx$");

Это будет учитывать только имя файла. / и \ — разделители путей. Итак, C:\foo.bar эквивалентен foo.bar, т.е. нету.

person xanatos    schedule 20.02.2011
comment
Я попробовал это в найденном тестовом приложении, и оно не работает: ссылка gskinner.com/RegExr/?2t53a Возможно, это приложение. - person Matthew McDermott; 20.02.2011
comment
@Matthew Потому что это основано на реализации регулярных выражений Flash (она построена на Flex). Я дал вам версию для C#. - person xanatos; 20.02.2011
comment
А потому что даже в c# это неправильно :-) Сейчас поправили. Вы не упомянули, что у вас есть полные пути. Я тестировал его только для чистых имен файлов. Теперь он игнорирует пути. - person xanatos; 20.02.2011
comment
Тестирование в RegEx не работает, как вы говорите. c:\foo.aspx и /foo.aspx совпадают. Только изменение расширения файла не приводит к совпадению. - person Matthew McDermott; 20.02.2011
comment
Я сделал изменение несколько минут назад. Вы проверяете @c:\foo.aspx? В противном случае \f экранируется. - person xanatos; 20.02.2011