To create a regular expression that matches a line not containing a specific word, use a negative lookahead assertion. This ensures the word does not appear anywhere in the line. Here’s how to do it:
Regex Pattern
^(?!.*\bword\b).*$
Explanation:
^: Start of the line.(?!.*\bword\b): Negative lookahead to ensure the line does not contain the wordword(with word boundaries)..*: Match any characters (except newlines) until the end of the line.$: End of the line.
Examples
1. Basic Usage
^(?!.*error).*$
- Matches lines without the word
error. - Example Match:
"Success: Operation completed." - No Match:
"Error: Invalid input."
2. Case-Insensitive Match
Add the i flag to ignore case:
^(?!.*error).*$ # Case-sensitive (default)
^(?i)(?!.*error).*$ # Case-insensitive (syntax varies by regex engine)
- Example Match:
"WARNING: No issues found."(avoidsERROR,Error, etc.).
Key Modifications
1. Exclude Empty Lines
Use .+ instead of .* to require at least one character:
^(?!.*error).+$
2. Match Partial Words (No Word Boundaries)
Remove \b to match substrings:
^(?!.*error).*$
- Example No Match:
"debuggerror"(contains “error” as a substring).
3. Multiline Input
Use the m (multiline) flag to match across multiple lines:
/^(?!.*error).*$/gm # In JavaScript
Code Implementation
JavaScript
const regex = /^(?!.*\berror\b).*$/gm;
const text = `
Success: Task completed.
Error: File not found.
Warning: Low memory.
`;
// Filter lines without "error"
const validLines = text.match(regex) || [];
console.log(validLines); // ["Success: Task completed.", "Warning: Low memory."]
Python
import re
text = """
Success: Task completed.
Error: File not found.
Warning: Low memory.
"""
pattern = re.compile(r'^(?!.*\berror\b).*$', re.MULTILINE)
valid_lines = [line.strip() for line in pattern.findall(text)]
print(valid_lines) # ['Success: Task completed.', 'Warning: Low memory.']
Common Edge Cases
- Empty Lines:
^(?!.*error).*$matches empty lines. Use^(?!.*error).+$to exclude them.
- Special Characters:
- Escape regex metacharacters (e.g.,
\bfoo\bbecomes\bfoo\biffoois literal).
- Multi-Line Inputs:
- Use flags like
m(multiline) ands(dotall) depending on your regex engine.
Why This Works
- The negative lookahead
(?!.*word)checks the entire line for the absence ofword. - Word boundaries (
\b) prevent partial matches (e.g.,errinerror).
Use this regex to filter logs, validate input, or parse files while excluding lines with specific keywords!