Подтвердить что ты не робот

Строка соответствия RegExp не начинается с моего

Для PMD я хотел бы иметь правило, которое предупреждает меня об этих уродливых переменных, которые начинаются с моего. Это означает, что я должен принимать все переменные, которые НЕ запускаются с моей.

Итак, мне нужен RegEx (re), который ведет себя следующим образом:

re.match('myVar')       == false
re.match('manager')     == true
re.match('thisIsMyVar') == true
re.match('myOtherVar')  == false
re.match('stuff')       == true

Я пробовал разные (перечисляю их здесь позже, извините, теперь у них нет доступа), но пока не работает.

4b9b3361

Ответ 1

Вы можете либо использовать утверждение lookahead, как это предлагали другие. Или, если вы просто хотите использовать базовый синтаксис регулярных выражений:

^(.?$|[^m].+|m[^y].*)

Это соответствует строкам длиной 0 или 1 символа (^.?$) и, следовательно, не может быть my. Или строки с двумя или более символами, где, когда первый символ не является m, могут следовать следующие символы (^[^m].+); или если первым символом является m, за ним не следует a y (^m[^y]).

Ответ 2

^(?!my)\w+$

должен работать.

Сначала он гарантирует, что невозможно совместить my в начале строки, а затем соответствует буквенно-цифровым символам до конца строки. Пробелы в любом месте строки вызовут ошибку regex. В зависимости от вашего ввода вам может понадобиться либо отрисовка пробелов в передней и задней части строки перед передачей ее в регулярное выражение, либо использование дополнительных опций для пробелов в регулярном выражении, например ^\s*(?!my)(\w+)\s*$. В этом случае backreference 1 будет содержать имя переменной.

И если вам нужно убедиться, что имя переменной начинается с определенной группы символов, скажем [A-Za-z_], используйте

^(?!my)[A-Za-z_]\w*$

Обратите внимание на изменение от + до *.

Ответ 3

/^(?!my).*/

(?!expression) - отрицательный результат; он соответствует позиции, в которой expression не соответствует началу в этой позиции.

Ответ 4

Разве не было бы более понятно читать положительное совпадение и отклонять эти строки - вместо того, чтобы соответствовать отрицательному, чтобы найти строки для принятия?

/^my/