2014-11-21 2 views
1

Я хочу, чтобы создать регулярное выражение, которое позволило быRegex для чисел, некоторые специальные символы и NULL

0-9
.
>
<
%
,
-
NULL

поэтому я написал регулярное выражение, как ^[0-9.><%,-NULL]*$

Это соответствует NULL, но не должны совпадать, когда пользователь вводит только N. Так что я сделал ^[0-9.&gt;&lt;%,-(NULL)]*$ но я

string pattern = "^[0-9.&gt;&lt;%,-(NULL)]*$"; 
Regex.Match("N", pattern).Success; 

это бросает исключение аргумента и говорит

`parsing "^[0-9.><%,-(NULL)]*$" - [x-y] range in reverse order. 

Так что должно быть правильным Regex?

+0

Является ли 'NULLNULLNULL' строкой, которая должна быть сопоставлена? –

ответ

2

Я думаю, что выражение вам нужно выглядеть примерно так:

"^([-0-9.><%,]|NULL)*$" 

Это соответствует нулю или более вхождений любого из символов в наборе символов (в квадратных скобках) и экземпляры NULL.


NULL Изготовление части вашего набора символов будут также соответствовать символам N, U и L отдельно. Попытка группировки с использованием (NULL) не будет иметь желаемого эффекта, но дополнительно сделает набор символов также совпадающим с круглыми скобками открытия и закрытия.

Ошибка вы упоминаете ([x-y] range in reverse order) обусловлена ​​тем, что в этом выражении

"^[0-9.><%,-(NULL)]*$" 

дефис считается для обозначения этого диапазона символов: ,-(. Поскольку скобка предшествует запятой, диапазон символов считается в обратном порядке.

Чтобы представить дефис (-) в наборе символов, вам необходимо избегать его интерпретации как обозначение диапазона символов. Это наиболее легко достигается путем помещения тире в начале или в конце набора символов.

+0

Выражение также допускает NULLNULLNULL. Возможно, переместите астерикс внутри первого подвыражения? –

+0

@ LasseV.Karlsen У меня создалось впечатление, что NULLNULLNULL нужно будет соответствовать. На самом деле, согласно оригинальному выражению OP, это было бы. –

+0

Хм, возможно, вы правы. –

Смежные вопросы