tags:

views:

52

answers:

2
^(.)+\S{10}(.)+$ 

I have that regex which will match any string that contains a word of 10 characters. However I need the INVERSE of that.
A regex that will only match strings which do NOT have words of >=10 characters.

A: 

Untested:

^\s*\S{0,9}(\s+\S{1,9})*\s*$

Matches one or more words. The first word is optional, so the empty string or a string of all whitespace will match. The words must be separated by whitespace \s+ so no more than 9 \S characters can ever be adjacent.

John Kugelman
+2  A: 

Use negative assertion.

(?!.*\S{10})

\S{10} matches a sequence of 10 \S (which must be a subsequence of anything longer). (?!pattern) is a negative lookahead, an assertion that is true if the pattern doesn't match. .* allows the lookahead to look as far as necessary.

The whole pattern therefore is

^(?!.*\S{10}).*$

This matches all string that do NOT contain \S{10}.

See also

polygenelubricants
In action: http://www.rubular.com/r/UNeoEdNkkU
polygenelubricants