Регулярное выражение соответствующая строка не начинается с моего


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

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

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

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

4 57

4 ответа:

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

^(.?$|[^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) является отрицательным lookahead; он соответствует позиции, где expressionне матч, начиная с этой позиции.

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

/^my/