Bird
Raised Fist0
PHPprogramming~5 mins

Lookahead and lookbehind in PHP - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a lookahead in regular expressions?
A lookahead checks if a certain pattern exists ahead in the text without including it in the match. It looks forward but does not consume characters.
Click to reveal answer
beginner
What is a lookbehind in regular expressions?
A lookbehind checks if a certain pattern exists behind the current position without including it in the match. It looks backward but does not consume characters.
Click to reveal answer
intermediate
How do you write a positive lookahead in PHP regex?
Use (?=pattern). For example, /foo(?=bar)/ matches 'foo' only if it is followed by 'bar'.
Click to reveal answer
intermediate
How do you write a negative lookbehind in PHP regex?
Use (?<!pattern). For example, /(?<!foo)bar/ matches 'bar' only if it is NOT preceded by 'foo'.
Click to reveal answer
intermediate
Why use lookahead and lookbehind instead of normal matching?
They let you check context around a match without including that context in the matched text. This helps when you want to find a pattern only if it is near another pattern, but you don't want to capture the nearby pattern.
Click to reveal answer
Which syntax represents a positive lookahead in PHP regex?
A(?<=pattern)
B(?=pattern)
C(?!pattern)
D(?<!pattern)
What does (?foo)bar match?
AMatches 'bar' only if NOT preceded by 'foo'
BMatches 'foo' followed by 'bar'
CMatches 'bar' only if preceded by 'foo'
DMatches 'bar' only if followed by 'foo'
Which lookaround checks text after the current position?
ANeither
BLookbehind
CBoth lookahead and lookbehind
DLookahead
What is the main difference between lookahead and normal matching?
ALookahead does not consume characters, normal matching does
BLookahead matches only digits
CLookahead matches only at the start of the string
DLookahead consumes characters in the match
Which of these is NOT a valid lookaround syntax in PHP regex?
A(?<!pattern)
B(?<=pattern)
C(?<>pattern)
D(?=pattern)
Explain how lookahead and lookbehind help in matching patterns with context in PHP regex.
Think about checking surroundings without including them in the match.
You got /4 concepts.
    Write a PHP regex example using positive lookahead and explain what it matches.
    Try matching a word only if followed by another word.
    You got /3 concepts.

      Practice

      (1/5)
      1. What does a positive lookahead (?=pattern) do in PHP regular expressions?
      easy
      A. Matches the pattern and consumes it in the string
      B. Checks if the specified pattern precedes the current position and includes it in the match
      C. Checks if the specified pattern follows the current position without including it in the match
      D. Checks if the pattern is anywhere in the string regardless of position

      Solution

      1. Step 1: Understand lookahead behavior

        A positive lookahead (?=pattern) checks if the pattern appears immediately after the current position without consuming characters.
      2. Step 2: Compare options with definition

        Checks if the specified pattern follows the current position without including it in the match correctly describes this behavior. Options B and C incorrectly describe lookbehind or normal matching. Checks if the pattern is anywhere in the string regardless of position is too broad.
      3. Final Answer:

        Checks if the specified pattern follows the current position without including it in the match -> Option C
      4. Quick Check:

        Positive lookahead = check after position [OK]
      Hint: Lookahead checks after current spot without consuming [OK]
      Common Mistakes:
      • Confusing lookahead with lookbehind
      • Thinking lookahead consumes characters
      • Assuming it matches anywhere, not just after position
      2. Which of the following is the correct syntax for a negative lookbehind in PHP regex?
      easy
      A. (?pattern)
      B. (?<=pattern)
      C. (?!pattern)
      D. (?=pattern)

      Solution

      1. Step 1: Recall lookbehind syntax

        Negative lookbehind in PHP regex is written as (?<!pattern), which asserts that the pattern does NOT appear before the current position.
      2. Step 2: Match options to syntax

        (?
      3. Final Answer:

        (?<!pattern) -> Option A
      4. Quick Check:

        Negative lookbehind = (?<!pattern) [OK]
      Hint: Lookbehind uses (?<=) or (?), negative has exclamation [OK]
      Common Mistakes:
      • Mixing lookahead and lookbehind syntax
      • Using wrong brackets or missing exclamation mark
      • Confusing negative and positive forms
      3. What will be the output of this PHP code?
      $text = "apple pie";
      if (preg_match('/apple(?= pie)/', $text)) {
          echo "Match found";
      } else {
          echo "No match";
      }
      medium
      A. Empty output
      B. Match found
      C. Syntax error
      D. No match

      Solution

      1. Step 1: Understand the regex pattern

        The pattern /apple(?= pie)/ matches 'apple' only if it is immediately followed by ' pie' without including ' pie' in the match.
      2. Step 2: Check the input string

        The string is "apple pie", so 'apple' is followed by ' pie'. The lookahead condition is true, so the match succeeds.
      3. Final Answer:

        Match found -> Option B
      4. Quick Check:

        Lookahead confirms 'apple' before ' pie' = Match found [OK]
      Hint: Lookahead checks next chars without consuming [OK]
      Common Mistakes:
      • Thinking lookahead consumes characters
      • Assuming no match because ' pie' is not part of match
      • Confusing output with syntax error
      4. Identify the error in this PHP regex using lookbehind:
      $text = "hello world";
      if (preg_match('/(?
      medium
      A. No error, code runs fine
      B. Lookbehind syntax is incorrect, missing brackets
      C. Lookbehind must be at the end of the pattern
      D. Lookbehind pattern is fixed width but 'hello' is variable length

      Solution

      1. Step 1: Check lookbehind syntax and pattern

        The lookbehind (?<!hello) is valid because 'hello' is fixed length (5 characters), which PHP supports.
      2. Step 2: Analyze the string and pattern match

        The string is "hello world". The lookbehind asserts 'world' is NOT preceded by 'hello'. Here, 'world' is preceded by 'hello', so the match fails and "No match" is printed.
      3. Final Answer:

        No error, code runs fine -> Option A
      4. Quick Check:

        Lookbehind syntax correct, no error [OK]
      Hint: Lookbehind must be fixed width, 'hello' is fixed length [OK]
      Common Mistakes:
      • Thinking 'hello' is variable length
      • Assuming lookbehind syntax is wrong
      • Expecting match when lookbehind condition fails
      5. You want to match all occurrences of the word 'cat' only if it is NOT preceded by 'wild' and is immediately followed by 's' in a string. Which regex pattern correctly uses lookahead and lookbehind in PHP?
      hard
      A. /(?<=wild )cat(?=s)/
      B. /(?<=wild)cat(?=s)/
      C. /(?wild)cat(?= s)/
      D. /(?wild )cat(?=s)/

      Solution

      1. Step 1: Understand the requirements

        We want 'cat' that is NOT preceded by 'wild ' (note the space) and IS followed immediately by 's'.
      2. Step 2: Analyze each option

        /(?(?<!wild ) to exclude 'wild ' before 'cat' and positive lookahead (?=s) to ensure 'cat' is followed by 's'. This matches the requirement.
        /(?<=wild )cat(?=s)/ uses positive lookbehind, which requires 'wild ' before 'cat', opposite of requirement.
        /(?/(?<=wild)cat(?=s)/ uses positive lookbehind without space, which is incorrect.
      3. Final Answer:

        /(?<!wild )cat(?=s)/ -> Option D
      4. Quick Check:

        Negative lookbehind + positive lookahead = /(?
      Hint: Negative lookbehind excludes prefix, positive lookahead confirms suffix [OK]
      Common Mistakes:
      • Forgetting space after 'wild' in lookbehind
      • Using positive lookbehind instead of negative
      • Adding space in lookahead incorrectly
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard