2016-03-30 3 views
-1

Можете ли вы помочь мне, пожалуйста, с регулярным выражением, которое будет иметь 4 цифры и 2 символовRegEx за два символа следуют четыре цифры

Я написал это

^([0-9]{4})(s*([a-zA-Z]{2}))?$ 

Но когда я проверить это также принимает всего 4 цифры.

+1

Я думаю, вы хотите использовать '\ s' вместо' s' для соответствия символам пробела 0+. –

+2

'(\ s * ([a-zA-Z] {2}))' ..remove '?' И использовать '\ s' – rock321987

ответ

0

Ваш ? означает, что предыдущий элемент не является обязательным.

Это означает, что он может совпадать с «3421», а также «2323som».


Регулярные выражения являются жадными, поэтому они будут стараться, чтобы соответствовать «2378som» вместо того, чтобы просто «2378», если вы их называете на «2378som». Причина, по которой вы не подходите, вероятно, s*. Это означает, что ноль или более "s". Если вы имеете в виду пробелы, то вы должны использовать (\s)*.

Таким образом, он должен стать

^([0-9]{4})((\s)*([a-zA-Z]{2}))?$ 

Проверьте unit tests here, чтобы понять, что это соответствует.

Будьте осторожны, это соответствует только тому, что \s представляет в среде вашего регулярного выражения (оно может не включать вкладки или другие типы пространств).


То, что вы написали, пытается соответствовать против символа «s» ноль или более раз, таким образом, это жало: «1234sab» действует, как «1234ab». Если вы хотели сопоставить «1234 ab», причина, по которой возвращается только «1234», заключается в том, что «s» отсутствует, поэтому он ищет 2 символа. Вы предоставили 3 символа «ab» (пробел + a + b), вне диапазона [a-zA-Z]. Таким образом, поскольку второй элемент не сопоставляется (имеет 3 символа, которые вам нужны 2, а пробел не A-Z), ваш ? игнорирует второй элемент и возвращает первый, эрго «1234».

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