I have a regular expression as follows:
^/[a-z0-9]+$This matches strings such as /hello or /hello123.
However, I would like it to exclude a couple of string values such as /ignoreme and /ignoreme2.
I've tried a few variants but can't seem to get any to work!
My latest feeble attempt was
^/(((?!ignoreme)|(?!ignoreme2))[a-z0-9])+$Any help would be gratefully appreciated :-)
16 Answers
Here's yet another way (using a negative look-ahead):
^/(?!ignoreme|ignoreme2|ignoremeN)([a-z0-9]+)$ Note: There's only one capturing expression: ([a-z0-9]+).
This should do it:
^/\b([a-z0-9]+)\b(?<!ignoreme|ignoreme2|ignoreme3)You can add as much ignored words as you like, here is a simple PHP implementation:
$ignoredWords = array('ignoreme', 'ignoreme2', 'ignoreme...');
preg_match('~^/\b([a-z0-9]+)\b(?<!' . implode('|', array_map('preg_quote', $ignoredWords)) . ')~i', $string); 3 As you want to exclude both words, you need a conjuction:
^/(?!ignoreme$)(?!ignoreme2$)[a-z0-9]+$Now both conditions must be true (neither ignoreme nor ignoreme2 is allowed) to have a match.
2This excludes all rows containing ignoreme from search results. It will also work pretty well when there are any character in a row
^((?!ignoreme).)*$ This worked for me:^((?!\ignoreme1\b)(?!\ignoreme2\b)(?!\ignoreme3\b).)*$
simpler:
re.findall(r'/(?!ignoreme)(\w+)', "/hello /ignoreme and /ignoreme2 /ignoreme2M.")you will get:
['hello']