2009-11-05 2 views
0

Вот мои требования:Я знаю, что это регулярное выражение может быть упрощено - .NET

  • 1-80 символов
  • Эти символы:
    • буквенно-цифровых
    • пространства
    • _ () [ ] ! # , . & * + : '/-

Регулярного выражения у меня ниже работ, но, в частности, я не знаю, как повторно использовать класс символов [\w\(\)\.\-\[\]!#,&*+:'\/]

[\w\(\)\.\-\[\]!#,&*+:'\/][\w\s\(\)\.\-\[\]!#,&*+:'\/]{0,79} 

Update:

Спасибо за все ваши ответы, это один сделал трюк

^(?!\s)[\w\s().\-!#&]{1,80}$ 

ответ

3

Если первый символ не может быть белым пространством попробовать это: (?!\s)[-\w\s().[\]\\!#,&*+:'/]{1,80}. Вы можете захотеть «скопировать» с помощью^в начале и $ в конце ^(?!\s)[-\w\s().[\]\\!#,&*+:'/]{1,80}$, чтобы регулярное выражение соответствовало всей строке.

+1

Вы можете опустить скобки вокруг '\ s'. Кроме этого, мне нравится это лучше всего. –

+0

О, и вы можете захотеть привязать его к '^' и '$' - но это решение OP. –

+1

Не работает с «тестовым тестовым тестом» –

4

Действительно ли это должно быть 100% регулярное выражение? Не могли бы вы сделать

[\w\s\(\)\.\-\[\]!#,&*+:'\/]{1,80} 

и отдельно убедиться, что первый символ не является пробелом?

+0

+1 для размышлений в поперечном направлении. –

3

Внутри класса персонажа только ] и \ нужны экраны. Даже - не нуждается в побеге, если это первый персонаж класса!

Вот простейшее регулярное выражение я мог бы уменьшить его:

[- \w().[\]!#,&*+:'/]{1,80} 
+0

Убедитесь, что вы не используете флаг пробела ignore с этим. – Geoff

+0

Также это будет соответствовать пробелам (\ 0x20), а не любым другим символам пробела. Это может быть именно то, что вы хотите, но следите за Unicode-пространствами и т. П. – Geoff

+0

'-' также не требует экранирования в качестве последнего символа в классе:' [a-z-] 'или непосредственно позиционируется после диапазона:' [a-c-d] '(соответствует' a-c', '-' или' d'). И даже ']' не нуждается в экранировании, если это первый символ в классе: '[] a]' соответствует ']' или 'a'. –

2

Вы можете использовать отрицательный взгляд вперед, чтобы проверить первый символ не является белым пространством. Тогда нет необходимости повторно использовать класс символов.

(?!\s)[\w\s\(\)\.\-\[\]!#,&*+:'\/]{1,80}