Вы говорите, что вам нужно сопоставить символы следующих типов:
- Числа
- Буквы
- Специальные символы
ОбычныеВ движках выражений есть (сокращенные) классы символов для этого.Попробуйте:
[0-9]
для чисел или сокращенную запись: \d
[A-Za-z]
для алфавитов [^A-Za-z0-9]
для специальных символов,Обратите внимание на ^
, что означает «не соответствует ни одному из следующих».
Теперь, когда вы знаете, как сопоставлять символы, нам нужен способ сказать, сколько из каждого символа мы используем.Принять, что делается с помощью квантификаторов :
*
означает любое число +
означает любое число больше 0 (то есть "существует вхотя бы один раз ") {n}
означает ровно n
раз {n,m}
означает от n
до m
раз
Таким образом, чтобы соответствоватьваш пример:
NNNSSAAANSAA
... вы наивно могли бы использовать ...
\d\d\d[^A-Za-z0-9][^A-Za-z0-9][A-Za-z][A-Za-z][A-Za-z]\d[^A-Za-z0-9][A-Za-z][A-Za-z]
... и сократить его с помощью квантификаторов, таких как:
\d{3}[^A-Za-z0-9]{2}[A-Za-z]{3}\d[^A-Za-z0-9][A-Za-z]{2}
CAVEAT: Обрабатывать всю сложность Unicode (например, подумать о римской цифре) немного сложнее, и поддержка таких вещей сильно варьируется между реализациями движка regex.