Regex - обязательное наличие символов в некоторой подстроке

Есть такая задача: в базе есть строки, оканчиваются схожим образом, примерно так: Т20NE99, P678SE, L99В0 и т.п. То есть эти строки могут быть разной длины, но находятся всегда в конце и отделяются от остальной части пробелом. В некоторых из подобных подстрок вместо английских символов записаны русские, мне нужно отыскать, где именно и отредактировать их. Написал такую регулярку: [ТМРВЕКХСАA-Z0-9]+$, но потом вспомнил, что в квадратных скобках символы ищутся через ИЛИ, то есть русские символы могут как существовать, так и нет, и этот вариант, разумеется, не подходит. Не могу припомнить, как можно указать, что какие-то символы должны присутствовать в подстроке обязательно? В данном случае - русские символы ТМРВЕКХСA, имеющие английские аналоги.


Ответы (2 шт):

Автор решения: Qwertiy

Если русских букв вообще не должно быть, то я бы искал просто

[ТМРВЕКХСA]

Если русские буквы в принципе бывают, но надо проверить их наличие в последних 7 символах:

[ТМРВЕКХСA].{0,6}$

Если надо ещё и строки, оканчивающиеся определёнными символами при этом найти, то (с квадратичной асимптотикой поиска):

(?=.*[ТМРВЕКХСA])[ТМРВЕКХСАA-Z0-9]{1,7}$
→ Ссылка
Автор решения: Wiktor Stribiżew

Используйте

[\u0422\u041C\u0420\u0412\u0415\u041A\u0425\u0421\u0410](?=\S*$)
[ТМРВЕКХСА](?=\S*$)

См. пример использования выражения.

  • [ТМРВЕКХСА] - буква Т, М, Р, В, Е, К, Х, С или А`
  • (?=\S*$) - от текущей позиции и до конца строки должно быть 0 и более непробельных символов.
→ Ссылка