У меня есть некоторые регулярные выражения, которые я использую для создания новых строк из ввода, и все это работает нормально.
То, что я сейчас пытаюсь сделать, - отобразить допустимые символы из наборов символов, которые используют регулярные выражения.
Так, например, у меня есть регулярное выражение [^A-Za-z0-9/_#\-\.]+
которое ничего не заменяет ничего вне этого диапазона (это для формата url, который я хочу).
У меня есть другой набор, который является просто [A-Za-z0-9/_#\-\.]
, [A-Za-z0-9/_#\-\.]
является только обратным приведенному выше правилу. Я не возражаю, что я имею правило дважды, поскольку они будут сделаны в одно и то же время в любом случае.
Идея того, что я хочу, состоит в том, что я могу отображать все допустимые символы во втором выражении, поэтому он должен читать что-то вроде: (некоторые для краткости удаляются)
A, B, C, D.... Z, a, b, c, d.... z, 0,1,2,3... 9,/, _, #, -,.
Есть ли способ вытащить все эти символы из регулярного выражения?
Моя единственная идея в настоящее время состоит в том, чтобы проанализировать символ либо размер -
(где это не пробел, либо запятая), а затем создать набор символов, основанный на диапазоне между двумя символами из его символьного кода.
Кто-нибудь получил какие-нибудь идеи? Или что-то я пропустил?
Я выложу свою идею, как только я это сделаю, если кто-то не сможет быстро избавить меня от хлопот!
Благодарю.
Поскольку char
в.NET имеет только 2 16 возможных значений, поочередно повторяя все символы и подавая их в свое регулярное выражение, вы должны предоставить приемлемое решение. Если вы знаете, что ввод ограничен символами с латинской страницы, вы можете ограничить проверку грубой силы на начальные 256 символов.
var rx = new Regex("[^A-Za-z0-9/_#\\-.]+");
for (char ch = (char)0 ; ch <= (char)255 ; ch++) {
if (!rx.Match(""+ch).Success) {
Console.Write(ch);
}
}
Это печатает #-./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz
0123456789
описанием «любая цифра» или0..9
диапазона0..9
, или что-то в этом роде. Я думаю, что с исчерпывающим списком символов легче работать, чем с регулярным выражением «черного ящика».