нужна помощь с правилом helicon регулярных выражений

#c# #asp.net #regex #iis

#c# #asp.net #регулярное выражение #iis

Вопрос:

Мне нужна некоторая помощь с регулярным выражением, поскольку я пишу новое правило в helicon.

пример URL будет содержать имя файла и параметр строки запроса, который я хочу сопоставить для обоих

 www.testwebsite.com/hello.aspx?filename=/test.aspamp;employeeid=2100amp;age=20 
  

в приведенном выше URL-адресе я хочу проверить, является ли он hello.aspx и содержит ли он строку запроса filename=/test.asp

имя файла может быть в любом месте строки запроса.

я хочу перенести приведенный выше URL на какую-нибудь другую страницу

 mynewpage.aspx $2$3 etc///
  

я написал следующий URL, но он не работает, он соответствует шаблону для всех, например sample1.aspx или любому имени файла

 (.*)(/hello.aspx? )(.*)(filename=/test.asp)(.*)
  

любая помощь будет оценена

Ответ №1:

Что вам нужно, так это группы, не захватывающие:

 (?:.*)(/hello.aspx? )(?:.*)(filename=/test.asp)(?:.*)
["www.testwebsite.com/hello.aspx?filename=/test.aspamp;employeeid=2100amp;age=20", "/hello.aspx?", "filename=/test.asp"]

(?:.*)(/hello.aspx? )(?:.*)(filename=/test.asp)(.*)
["www.testwebsite.com/hello.aspx?filename=/test.aspamp;employeeid=2100amp;age=20", "/hello.aspx?", "filename=/test.asp", "amp;employeeid=2100amp;age=20"]
  

Если вы хотите получить все параметры отдельно от строки запроса, вы можете сделать это следующим образом:

 string queryString = (new Uri("...")).Query;
NameValueCollection parameters = HttpUtility.ParseQueryString(queryString);
parameters.Get("filename");
parameters.Get("employeeid");
parameters.Get("age");
  

Комментарии:

1. @dan я не получаю всю строку запроса values.in $3

2. @мне также нужны идентификатор сотрудника и возраст.

3. о, извините, я забыл об этом

4. всегда ли имя файла, идентификатор сотрудника и возраст отображаются в таком порядке?

5. не могли бы вы указать, что именно вы ожидаете получить в группе $ 3?