Регулярное выражение с пустыми символами

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

  1. Содержит ровно 3 символа.
  2. Может содержать пробелы.
  3. По крайней мере один символ должен быть не пробелом.
  4. Допускаются только пробелы и цифры.

См. примеры ниже. Я использую b для представления символа пробела.

Действительные примеры

123
b12
bb1
1bb
12b

Недопустимые примеры

bbb
1b2

я пробовал

 [0-9 ]{1, 3}

Приведенное выше регулярное выражение соответствует строкам, в которых все символы пусты. Может ли кто-нибудь помочь мне написать лучшее регулярное выражение?


person AGEM    schedule 20.01.2013    source источник
comment
Почему 1b2 недействителен? Это не нарушает ни одного из четырех правил, которые вы указали выше.   -  person Tim Pietzcker    schedule 20.01.2013


Ответы (2)


Это надо писать полностью. К счастью, если вы имеете в виду, что вам нужны только числа, которым необязательно предшествуют пробелы или за которыми следуют пробелы (как видно из бита 1b2, который не разрешен), существует лишь небольшое количество возможностей.

([0-9]  )|([0-9]{2} )|([0-9]{3})|(  [0-9])|( [0-9]{2})

Вот оно.

Конечно, если вы можете выполнить проверку длины = 3 вне регулярного выражения, само регулярное выражение можно сократить до

([0-9]{1,3}[ ]*)|([ ]*[0-9]{1,3})
person Mr Lister    schedule 20.01.2013

Я бы использовал просмотр вперед для этого:

^(?=.*\d)[\d ]{3}$

Пояснение:

^         # Start of string
(?=.*\d)  # Assert presence of at least one digit
[\d ]{3}  # Match exactly three digits or spaces
$         # End of string
person Tim Pietzcker    schedule 20.01.2013
comment
я тестирую это регулярное выражение, используя pcre, оно даже не соответствует 123 - person slier; 20.01.2013
comment
@slier: извините, у меня был ложный ^ в классе персонажей. Дурак я. - person Tim Pietzcker; 20.01.2013