В следующем относительном URL-адресе я хочу получить необязательный параметр происхождения, но мне просто нужен сам источник (это будет test в следующем URL-адресе, а не with-test-origin )

/somequery/with-test-origin/param/param/more

URL соответствует, когда я использую это регулярное выражение:

([^/]+)/(?:(?:with-)([^/]*)(-origin)/)?([^/]*/)?([^/]*/)?more

Но не когда я использую это:

([^/]+)/(?:(?:with-)([^/]*)(?:-origin)/)?([^/]*/)?([^/]*/)?more

В чем проблема? почему не работает, когда я не хочу ловить группу (-origin) ?

Изменить:

Тестирую в приложении, все работало нормально. Я также пробовал это в web.config:

([^/]+)/(?:(with-)([^/]*)(?:-origin)/)?([^/]*/)?([^/]*/)?more

В web.config (удален?: из (?: with-) и вернул его в (?: - origin), и он тоже работал в web.config. Есть ли ограничение в web.config файл для количества групп или групп, которых я не хочу ловить?

Вот как я использую его в своем файле web.config:

<rule name="tst" enabled="true" stopProcessing="true">
          <match url="([^/]+)/(?:(?:with-)([^/]*)(?:-origin)/)?([^/]*/)?([^/]*/)?more" />
          <action type="Rewrite" url="moreinfo.aspx?cat={R:1}&amp;sub1={R:2}&amp;sub2={R:3}&amp;sub3={R:4}&amp;sub4={R:5}" />
        </rule>
1
Ashkan Mobayen Khiabani 7 Мар 2015 в 09:44

2 ответа

Лучший ответ

После нескольких часов борьбы я наконец нашел проблему.

Совпадения отсчитываются от нуля и выглядят как {R: 0} {R: 1}, ... При использовании ?: количество совпадений было уменьшено на 1, поэтому, например, {R: 1}, которые были действительными до добавления ?: , оказываются недействительными.

0
Ashkan Mobayen Khiabani 7 Мар 2015 в 14:27

Поведение соответствия не должно изменяться из-за этой разницы. Проблема либо в следующем:

  • Что-то еще в вашем файле web.config.
  • Ошибка в движке регулярных выражений или в web.config.
0
user1919238user1919238 7 Мар 2015 в 08:06