Write a regular expression to match lines not containing a word

David Y.

The Problem

How can I write a regular expression to match lines not containing a specific word?

The Solution

You can do this using a negative lookahead assertion. The PCRE regular expression below will match any line that does not contain the word “word”:

/^((?!word).)*$/gm

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 ^ and $ 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:

/^((?!word).)*$/gms

If the s flag is not supported by your regex implementation, you can replace . with [\s\S] (\s matches whitespace characters, and \S matches everything except whitespace characters).

/^((?!word)[\s\S])*$/gm
Join the discussionCome work with us
Share on Twitter
Bookmark this page
Ask a questionImprove this Answer

Related Answers

A better experience for your users. An easier life for your developers.

    TwitterGitHubDribbbleLinkedin
© 2023 • Sentry is a registered Trademark
of Functional Software, Inc.