RegEx - проверить, не содержит ли строка определенную строку? - PullRequest
1 голос
/ 16 сентября 2011
abcVIRTUAL123   ^(?!.*VIRTUAL).*$^([a-zA-Z]{3})([a-zA-z0-9]{7})(\d{3})$ FALSE
abcVIRTUAL123   ^([a-zA-Z]{3})([a-zA-z0-9]{7})(\d{3})$                     TRUE
abcLOCATOR123   ^(?!.*VIRTUAL).*$^([a-zA-Z]{3})([a-zA-z0-9]{7})(\d{3})$ FALSE
abcLOCATOR123   ^([a-zA-Z]{3})([a-zA-z0-9]{7})(\d{3})$                     TRUE

Привет, я новичок в REGEX и использую библиотеку VBScript из Excel.

В приведенном выше примере я хочу проверить, содержит ли строка слово «VIRTUAL», и если да, вернуть ложное совпадение. Я думаю, что это почти все, за исключением того, что оставшаяся часть шаблона делает строку допустимой. Это игнорирует мой первый негативный взгляд в будущее.

Я пробовал разные комбинации на форумах, но застрял.

Любая помощь приветствуется.

Приветствие Nik

Ответы [ 2 ]

1 голос
/ 16 сентября 2011

Этот: ^([a-zA-Z]{3})(?!VIRTUAL)[a-zA-Z]{7}\d{3}$

Может быть, лучше сопоставить этот шаблон ^([a-zA-Z]{3})VIRTUAL\d{3}$ и инвертировать результат?

1 голос
/ 16 сентября 2011

У вас есть $^ в середине вашего регулярного выражения, что означает «конец строки с последующим началом строки». Конечно, это никогда не может совпадать.

Попробуйте

^(?!.*VIRTUAL)([a-zA-Z]{3})([a-zA-z0-9]{7})(\d{3})$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...