RegExp matching string not starting with my

Dominik Sandjaja picture Dominik Sandjaja · Jan 22, 2010 · Viewed 208.9k times · Source

For PMD I'd like to have a rule which warns me of those ugly variables which start with my.
This means I have to accept all variables which do NOT start with my.

So, I need a RegEx (re) which behaves as follows:

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

I've tried different ones but haven't got it working yet.

Answer

Tim Pietzcker picture Tim Pietzcker · Jan 22, 2010
^(?!my)\w+$

should work.

It first ensures that it's not possible to match my at the start of the string, and then matches alphanumeric characters until the end of the string. Whitespace anywhere in the string will cause the regex to fail. Depending on your input you might want to either strip whitespace in the front and back of the string before passing it to the regex, or use add optional whitespace matchers to the regex like ^\s*(?!my)(\w+)\s*$. In this case, backreference 1 will contain the name of the variable.

And if you need to ensure that your variable name starts with a certain group of characters, say [A-Za-z_], use

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

Note the change from + to *.