Я пытаюсь запустить регулярное выражение в коде VBA, который использует регулярные выражения Microsoft VBScript 5.5 (должно совпадать с регулярным выражением JavaScript).
Регулярное выражение: ^[0-9A-Z]?[0-9A-Z]{3}[A-Z]?([0-9A-Z]{6})-?([0-9])?$
Ввод: X123A1234567
Совпадение: 123456
Шесть символов, которые меня интересуют, дают хорошее совпадение 123456
, игнорируя последнюю (контрольную) цифру. Отлично. (Контрольная цифра снята, но для меня это не главное).
Но когда ОБА дополнительные части отсутствуют (они являются необязательными), совпадение захватывает последнюю цифру.
GOOD
Ввод: 123123456
Совпадение: 123456
Нет альфа, нет контрольной цифры. Хороший матч.
GOOD
Ввод: 123A1234567
Совпадение: 123456
Оставьте опциональную среднюю альфу, уберите опциональную начальную альфа, оставьте контрольную цифру, и мы все равно получим хорошее совпадение 123456
.
GOOD
Ввод: X1231234567
Совпадение: 123456
Оставьте в необязательной ведущей альфе, уберите среднюю необязательную альфу, оставьте контрольную цифру, и мы все равно получим хорошее совпадение 123456
.
BAD
Ввод: 1231234567
Совпадение: 234567
Удалите ОБА дополнительные необязательные символы, оставьте контрольную цифру, и мы получим неправильное совпадение 234567
.
Посмотрите тестеры регулярных выражений на http://www.regular -expressions.info / javascriptexample.html или http://www.regular -expressions.info / vbscriptexample.html .
Что мне здесь не хватает? Как я могу получить регулярное выражение, чтобы игнорировать последнюю цифру, когда оба дополнительных альфа отсутствуют? Регулярное выражение используется для подачи в поисковую систему, поэтому независимо от формата входных данных мы можем сопоставить полное значение.
ОБНОВЛЕНИЕ: ни один из приведенных выше примеров не содержит дефис (показанный в регулярном выражении). Входные данные с дефисом и контрольной цифрой всегда совпадают.
ОБНОВЛЕНИЕ: рабочее регулярное выражение, благодаря приведенным ниже предложениям (спасибо!):
Регулярное выражение: ^[A-Z]?[0-9]{3}[A-Z]?([0-9]{6})-?([0-9])?$