How can I write a regular expression to match lines not containing a specific word?
Here’s what it does:
/: Start regular expression.
^: Match the beginning of a line.
(: Start capture group 1.
(?!word): Negative lookahead assertion. If “word” is found, discard the current match, otherwise continue evaluating the expression.
.: Match any character.
): End capture group 1.
*: Match 0 or more of capture group 1.
$: Match the end of the line.
/: End regular expression
g: Global flag. Find all matches in the string, not just the first one.
m: Multiline flag. Use
$to match the start and end of a line, rather than the start and end of the whole string.
Notably, this expression will not match empty lines. If this behavior is desired, we can add the
s (dotall) flag, which will make
. match all characters including newlines:
s flag is not supported by your regex implementation, you can replace
\s matches whitespace characters, and
\S matches everything except whitespace characters).