Регулярное выражение - соответствует только 7 символов? - PullRequest
5 голосов
/ 15 марта 2010

Я пытаюсь сопоставить SEDOL (ровно 7 символов: 6 буквенно-цифровых символов, за которыми следует 1 цифровой символ)

Мое регулярное выражение

([A-Z0-9]{6})[0-9]{1}

соответствует правильно, но строки, содержащие более 7 символов, начинающиеся с правильного соответствия, также совпадают (если вы понимаете, что я имею в виду :)). Например:

B3KMJP4

соответствует правильно, но также:

B3KMJP4x

, который не должен совпадать.

Может кто-нибудь показать мне, как этого избежать?

Ответы [ 4 ]

6 голосов
/ 15 марта 2010

Знак доллара в конце регулярного выражения (называемый якорем) означает конец строки:

^([A-Z0-9]{6})\d$

Я также добавил «^» в начале, что означает начало строки и предотвращает совпадение xB3KMJP4 Я также упростил исходное регулярное выражение.

Кстати, согласно Википедии, для первого символа гласные не используются. Я не совсем уверен, является ли это правилом или соглашением.

5 голосов
/ 15 марта 2010

Вам нужно использовать и start, и end anchors, например:

^([A-Z 0-9]{6})[0-9]{1}$

Это будет соответствовать строке, которая имеет 6 буквенно-цифровой + пробел, за которым следует одна цифра . Он не совпадает, если такая строка найдена как суффикс или префикс большей строки.

Также вы можете избавиться от {1}, поскольку [0-9] соответствует одной цифре.

Также \d представляет одну цифру. Таким образом, вы можете сократить свое регулярное выражение следующим образом:

^([A-Z \d]{6})\d$
3 голосов
/ 15 марта 2010

Вы забываете, что регулярные выражения совпадают в любом месте строки. Чтобы это исправить, попробуйте это.

^([A-Z 0-9]{6})[0-9]{1}$

^ означает совпадение с началом строки, а $ означает совпадение с концом строки.

3 голосов
/ 15 марта 2010
 ^([A-Z\d]{6})\d$
  • Используйте ^ для начала строки
  • $ для конца строки
  • Удалить лишнее пространство, только что заметил
  • Поменялся местами 0-9 с \ d
  • Удалено {1}, поскольку это избыточно
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...