Для PMD я хотел бы иметь правило, которое предупреждает меня о тех уродливых переменных, которые начинаются с my
.
Это означает, что я должен принять все переменные, которые НЕ начинаются с my
.
Итак, мне нужен RegEx (re), который ведет себя следующим образом:
re.match('myVar') == false
re.match('manager') == true
re.match('thisIsMyVar') == true
re.match('myOtherVar') == false
re.match('stuff') == true
Я пробовал разные, но пока не работает.
regex
regex-negation
pmd
Доминик Санджая
источник
источник
Ответы:
Вы можете использовать утверждение опережающего просмотра, как предлагали другие. Или, если вы просто хотите использовать базовый синтаксис регулярных выражений:
^(.?$|[^m].+|m[^y].*)
Это соответствует строкам, состоящим из нуля или одного символа (
^.?$
) и, следовательно, не может бытьmy
. Или строки с двумя или более символами, где, когда первый символ не является,m
могут следовать другие символы (^[^m].+
); или если первый символ - это,m
он не должен сопровождаться знакомy
(^m[^y]
).источник
^(?!my)\w+$
должно сработать.
Сначала он обеспечивает невозможность сопоставления
my
в начале строки, а затем сопоставляет буквенно-цифровые символы до конца строки. Пробел в любом месте строки приведет к сбою регулярного выражения. В зависимости от вашего ввода вы можете либо удалить пробелы в передней и задней части строки, прежде чем передавать ее в регулярное выражение, либо использовать добавление дополнительных сопоставителей пробелов в регулярное выражение, например^\s*(?!my)(\w+)\s*$
. В этом случае обратная ссылка 1 будет содержать имя переменной.И если вам нужно убедиться, что имя вашей переменной начинается с определенной группы символов, скажем
[A-Za-z_]
, используйте^(?!my)[A-Za-z_]\w*$
Обратите внимание на изменение с
+
на*
.источник
/^(?!my).*/
(?!expression)
отрицательный взгляд вперед; он соответствует позиции, гдеexpression
не соответствует, начиная с этой позиции.источник
Разве не было бы намного удобнее выполнять положительное сопоставление и отклонять эти строки, а не сопоставлять отрицательное, чтобы найти строки для принятия?
/^my/
источник