RE
1 Introduction to Regular Expressions
1.1 Definition and Purpose
1.2 History and Evolution
1.3 Applications of Regular Expressions
2 Basic Concepts
2.1 Characters and Metacharacters
2.2 Literals and Special Characters
2.3 Escaping Characters
2.4 Character Classes
3 Quantifiers
3.1 Basic Quantifiers (?, *, +)
3.2 Range Quantifiers ({n}, {n,}, {n,m})
3.3 Greedy vs Lazy Quantifiers
4 Anchors
4.1 Line Anchors (^, $)
4.2 Word Boundaries ( b, B)
5 Groups and Backreferences
5.1 Capturing Groups
5.2 Non-Capturing Groups
5.3 Named Groups
5.4 Backreferences
6 Lookahead and Lookbehind
6.1 Positive Lookahead (?=)
6.2 Negative Lookahead (?!)
6.3 Positive Lookbehind (?<=)
6.4 Negative Lookbehind (?
7 Modifiers
7.1 Case Insensitivity (i)
7.2 Global Matching (g)
7.3 Multiline Mode (m)
7.4 Dot All Mode (s)
7.5 Unicode Mode (u)
7.6 Sticky Mode (y)
8 Advanced Topics
8.1 Recursive Patterns
8.2 Conditional Patterns
8.3 Atomic Groups
8.4 Possessive Quantifiers
9 Regular Expression Engines
9.1 NFA vs DFA
9.2 Backtracking
9.3 Performance Considerations
10 Practical Applications
10.1 Text Search and Replace
10.2 Data Validation
10.3 Web Scraping
10.4 Log File Analysis
10.5 Syntax Highlighting
11 Tools and Libraries
11.1 Regex Tools (e g , Regex101, RegExr)
11.2 Programming Libraries (e g , Python re, JavaScript RegExp)
11.3 Command Line Tools (e g , grep, sed)
12 Common Pitfalls and Best Practices
12.1 Overcomplicating Patterns
12.2 Performance Issues
12.3 Readability and Maintainability
12.4 Testing and Debugging
13 Conclusion
13.1 Summary of Key Concepts
13.2 Further Learning Resources
13.3 Certification Exam Overview
Lookahead and Lookbehind in Regular Expressions

Lookahead and Lookbehind in Regular Expressions

1. Positive Lookahead (?=...)

Positive lookahead asserts that what immediately follows the current position in the string is the specified pattern. It is written as (?=...). The lookahead itself is not included in the match.

Example:

Pattern: foo(?=bar)

Matches: "foo" in "foobar"

Explanation: The pattern matches "foo" only if it is followed by "bar", but "bar" is not included in the match.

2. Negative Lookahead (?!...)

Negative lookahead asserts that what immediately follows the current position in the string is not the specified pattern. It is written as (?!...). The lookahead itself is not included in the match.

Example:

Pattern: foo(?!bar)

Matches: "foo" in "foobaz"

Explanation: The pattern matches "foo" only if it is not followed by "bar", but "baz" is not included in the match.

3. Positive Lookbehind (?<=...)

Positive lookbehind asserts that what immediately precedes the current position in the string is the specified pattern. It is written as (?<=...). The lookbehind itself is not included in the match.

Example:

Pattern: (?<=foo)bar

Matches: "bar" in "foobar"

Explanation: The pattern matches "bar" only if it is preceded by "foo", but "foo" is not included in the match.

4. Negative Lookbehind (?<!...)

Negative lookbehind asserts that what immediately precedes the current position in the string is not the specified pattern. It is written as (?<!...). The lookbehind itself is not included in the match.

Example:

Pattern: (?<!foo)bar

Matches: "bar" in "bazbar"

Explanation: The pattern matches "bar" only if it is not preceded by "foo", but "baz" is not included in the match.

5. Practical Examples

Lookahead and lookbehind are powerful tools for precise pattern matching. Here are some practical examples:

Example:

Pattern: \d+(?=\sUSD)

Text: "The price is 100 USD."

Matches: "100"

Explanation: The pattern matches a number only if it is followed by a space and "USD".

Example:

Pattern: (?<=\$)\d+

Text: "The price is $100."

Matches: "100"

Explanation: The pattern matches a number only if it is preceded by a dollar sign.