Соответствующая строка RegExp не начинается с моего - PullRequest
71 голосов
/ 22 января 2010

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

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

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

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

Ответы [ 4 ]

138 голосов
/ 22 января 2010
^(?!my)\w+$

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

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

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

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

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

47 голосов
/ 22 января 2010
/^(?!my).*/

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

35 голосов
/ 22 января 2010

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

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

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

5 голосов
/ 12 сентября 2011

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

/^my/
...