В следующем относительном 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}&sub1={R:2}&sub2={R:3}&sub3={R:4}&sub4={R:5}" />
</rule>
2 ответа
После нескольких часов борьбы я наконец нашел проблему.
Совпадения отсчитываются от нуля и выглядят как {R: 0} {R: 1}, ... При использовании ?: количество совпадений было уменьшено на 1, поэтому, например, {R: 1}, которые были действительными до добавления ?: , оказываются недействительными.
Поведение соответствия не должно изменяться из-за этой разницы. Проблема либо в следующем:
- Что-то еще в вашем файле web.config.
- Ошибка в движке регулярных выражений или в web.config.
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.