I\'m trying to craft two regular expressions that will match URIs. These URIs are of the format: /foo/someVariableData
and /foo/someVariableData/bar/someO
Try
String regex = "/foo/(?!.*bar).+";
or possibly
String regex = "/foo/(?!.*\\bbar\\b).+";
to avoid failures on paths like /foo/baz/crowbars
which I assume you do want that regex to match.
Explanation: (without the double backslashes required by Java strings)
/foo/ # Match "/foo/"
(?! # Assert that it's impossible to match the following regex here:
.* # any number of characters
\b # followed by a word boundary
bar # followed by "bar"
\b # followed by a word boundary.
) # End of lookahead assertion
.+ # Match one or more characters
\b
, the "word boundary anchor", matches the empty space between an alphanumeric character and a non-alphanumeric character (or between the start/end of the string and an alnum character). Therefore, it matches before the b
or after the r
in "bar"
, but it fails to match between w
and b
in "crowbar"
.
Protip: Take a look at http://www.regular-expressions.info - a great regex tutorial.