Вы не должны слишком беспокоиться о шагах, которые вы видите на regex101.com, потому что библиотека C # regex очень надежна. Если вы протестируете простое регулярное выражение, например (?s)a.*?b
, в regex101 с очень длинной строкой, оно сообщит о катастрофическом возврате, в то время как в коде C # будет работать нормально.
Существует способ улучшить ваш шаблон, поскольку он имеет некоторую избыточность: см. Повторяющийся шаблон \d+\s+[-]
.
Все, что вам нужно, это
\d+\s+-.*?(?=\s+-|$)
См. Демонстрацию regex на regex101 и RegexStorm .
Если .*?(?=\s+-)
должно совпадать только при наличии пробела после -
, используйте
\d+\s+-(?:\s.*?(?=\s+-)|.+)
См. Еще одну демонстрацию 1 (меньше шагов :)) / демо 2 .
Если вы хотите оптимизировать его дальше, вы можете изучить принцип развертывания цикла , который приводит к
\d+\s+-(?:\s+\S*(?:\s(?!\s*-)\S*)*|.+)
См. [1131 ] это демо-выражение (наименьшее количество шагов).
Здесь \S*(?:\s(?!\s*-)\S*)*
является эквивалентом (почти) для .*?(?=\s+-|$)
, но более эффективно, поскольку фрагменты до пробела сопоставляются в «пакетах», проверки на дефис выполняются только при обнаружении пробела . [тысяча сто пятьдесят пять]
Подробности
\d+
- 1+ цифр \s+
- 1+ пробелов -
- a дефис .*?(?=\s+-|$)
- любые 0+ символов, как можно меньше, вплоть до первого появления 1+ пробелов и -
или до конца строки. (?:\s.*?(?=\s+-)|.+)
- группа без захвата: \s.*?(?=\s+-)
- пробелы, 0+ символов, как можно меньше, до 1+ пробелов и -
|
] - или .+
- остальная часть строки. \S*(?:\s(?!\s*-)\S*)*
: \S*
- 0+ непробельных символов (?:\s(?!\s*-)\S*)*
- 0 или более повторений \s
- пробел li> (?!\s*-)
- не сопровождается 0+ пробелами и -
li> \S*
- 0+ непробельных символов li> ul> Это могло быть ошибкой под IIS 7.
Я не мог добраться Request.ServerVariables("URL")
и Request.ServerVariables("SCRIPT_NAME")
возвращать различные значения. Я рассмотрел дела, где их назвали из включенного файла (<!--#include file="file.asp"-->
) или после a Server.Transfer
.
Это, возможно, там в случае Сервера. Передача?
В случае, где Вы делаете server.transfer, я думаю, что Вы получили бы различные результаты
т.е. SCRIPT_NAME был бы, например, /path/to.transferredfile.asp, тогда как URL останется как /path/to/file.asp