Ошибка .NET Regex: диапазон в обратном порядке

Я создаю Regex, и до сих пор я это делал и пробовал,

^([0][1-9]|1[0-2])[/-.] 

и я получаю следующую ошибку.

  parsing "^([0][1-9]|1[0-2])[/-.]" - [xy] range in reverse order. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.ArgumentException: parsing "^([0][1-9]|1[0-2])[/-.]" - [xy] range in reverse order. 

Немного побеспокоившись и пытаясь найти ошибку в моем регулярном выражении, я просто изменил регулярное выражение на

  ([0][1-9]|1[0-2])[-/.] so basically only changed this [/-.] to [-/.] 

и это сработало.

Затем я попробовал некоторые другие комбинации, которые сработали.

  [/-] [/.] [/.-] [/-?] 

Затем я попробовал некоторые другие, которые не сработали.

  [/-\*] [/-\+] 

Таким образом, по-видимому, «-» имеет проблемы в некоторых местах, но не проблема в других. Это ошибка? или я что-то упускаю?

Обновить

Спасибо, ребята, указав, что «-» считается диапазоном, если он посередине или не экранирован «\».

Однако, почему он работал для [/ -?] Или [/ – \?], Действительно ли он определяет диапазон здесь или воспринимает его буквально?

Не ошибка. Внутри символьного classа (обозначается символом […] ) - символ должен быть первым (некоторые варианты допускают, по-моему, первый или последний), если он должен быть включен как литерал. В противном случае ожидается обозначение диапазона, например 0-9 или AZ или даже /-. ,

Проблема в том, что согласно ASCII (или Unicode?),. предшествует / , поэтому диапазон интерпретируется как обратный, что эквивалентно заданию диапазона 7-4 .

Если вы использовали [.-/] , я бы не ожидал исключения синтаксического анализа, но вы не получили бы ожидаемых результатов.

Проблема заключается в этой части:

 [/-.] 

Это означает «диапазон символов от« / »до«. », Но« / »появляется после «. ». в Unicode, поэтому диапазон не имеет смысла.

Если вы хотите, чтобы это означало «слэш, тире или период», вы хотите:

 [/\-.] 

… другими словами, вам нужно уйти от черточки. Обратите внимание, что если это обычный литерал строки C #, вам также необходимо выполнить еще один уровень экранирования:

 string pattern = "[/\\-.]"; 

Использование текстового литерала verbatim означает, что вам не нужно скрывать обратную косую черту:

 string pattern = @"[/\-.]"; 

В качестве альтернативы, как предположил Джей, вы можете просто поставить тире в начале:

 [-/.] 

или конец:

 [/.-] 

(Я только что протестировал, и все три из этих вариантов работают.)

Внутри символьного classа, т. Е. [] - обозначает диапазон, т. Е. Все строчные буквы между a и z могут быть выражены как [az] .

Каков диапазон для [/-.] ?

У меня также было это сообщение об ошибке, но с некоторыми разными аргументами. К счастью, это были просто аргументы неправильным образом.