Регулярное выражение для звезды с номером, а затем цифры или одна буква - PullRequest
0 голосов
/ 04 мая 2020

У меня есть это регулярное выражение

^[0-9]+[a-zA-Z0-9]*

Но мне нужно одно, которое всегда помечается цифрой, тогда это может быть другое число или буква, но это не может быть цифра или буква. Письмо всегда будет последним. Как в этом примере

102A OK
1A OK
2  OK
110 OK
10A1 WRONG
BV WRONG

Буква не может быть между двумя числами.

Ответы [ 2 ]

1 голос
/ 04 мая 2020

Вы можете использовать отрицательный прогноз.

^(?!\d+[a-z]\d)\d.*

с установленным флагом безразличного регистра.

Демо

Соответствие этому регулярное выражение означает, что строка не содержит 3-символьную подстроку, состоящую из ди git, буквы, ди git в этом порядке. Если вся строка должна быть сопоставлена ​​при успешном совпадении, добавьте .* в конец регулярного выражения.

Механизм регулярного выражения выполняет следующие операции.

^             match beginning of line
(?!           begin negative lookahead
  \d+[a-z]\d  match digits-letter-digit
)             end negative lookahead
\d            match a digit

Обратите внимание, что \d в конце должен следовать за негативным прогнозом. Если бы регулярное выражение было ^\d(?!.\d+[a-z]\d), а строка - 1A1, то отрицательный прогноз не смог бы найти di git -letter-di git в A1 и общее совпадение было бы успешным (неверно).

Поскольку отрицательный указатель выводится на начало строки и не потребляет никаких символов, в случае неудачи (совпадение успешно) поиск \d в конце регулярного выражения начинается с начала строки.

1 голос
/ 04 мая 2020

Вы можете сопоставить символ 1-9, за которым следуют дополнительные цифры 0-9 и дополнительные символы a-zA-Z.

Если вы используете [a-zA-Z0-9], то класс символов будет совпадать с любым из перечисленных в любом порядке.

Если вы разделяете символы и цифры, буква не может идти перед цифрами и, поскольку квантификатор * соответствует 0 или более раз, вы также можете сопоставить один ди git.

^[1-9][0-9]*[a-zA-Z]*$

Regex demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...