Bird
Raised Fist0
PHPprogramming~20 mins

Preg_match for pattern matching in PHP - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Preg_match Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this preg_match code?

Consider the following PHP code snippet using preg_match. What will it output?

PHP
<?php
$pattern = '/^hello/';
$subject = 'hello world';
if (preg_match($pattern, $subject)) {
    echo 'Match found';
} else {
    echo 'No match';
}
?>
AMatch foundhello
BNo match
CWarning: preg_match(): Unknown modifier '^'
DMatch found
Attempts:
2 left
💡 Hint

Check if the pattern matches the start of the string.

❓ Predict Output
intermediate
2:00remaining
What does this preg_match return?

What will be the output of this PHP code?

PHP
<?php
$pattern = '/\d+/';
$subject = 'abc123xyz';
if (preg_match($pattern, $subject, $matches)) {
    echo $matches[0];
} else {
    echo 'No digits';
}
?>
AWarning: preg_match(): Unknown modifier '\'
B123
CNo digits
Dabc123xyz
Attempts:
2 left
💡 Hint

Look for digits in the string.

❓ Predict Output
advanced
2:00remaining
What is the output of this preg_match with capturing groups?

Analyze this PHP code and determine its output.

PHP
<?php
$pattern = '/(foo)(bar)?/';
$subject = 'foobar';
if (preg_match($pattern, $subject, $matches)) {
    echo count($matches);
} else {
    echo 'No match';
}
?>
A3
B2
C1
DNo match
Attempts:
2 left
💡 Hint

Count how many capturing groups matched.

❓ Predict Output
advanced
2:00remaining
What error does this preg_match code produce?

What error will this PHP code produce when run?

PHP
<?php
$pattern = '/[a-z/';
$subject = 'abc';
preg_match($pattern, $subject);
?>
AWarning: preg_match(): Compilation failed: missing terminating ] for character class
BNo output, runs fine
CFatal error: Uncaught Error: Call to undefined function preg_match()
DParse error: syntax error, unexpected '/'
Attempts:
2 left
💡 Hint

Check the regex pattern syntax carefully.

🧠 Conceptual
expert
2:00remaining
How many matches does preg_match find here?

Given this PHP code, how many matches will preg_match find?

PHP
<?php
$pattern = '/cat/';
$subject = 'cat concatenate catapult';
$result = preg_match($pattern, $subject, $matches);
echo $result;
?>
A0
B2
C1
D3
Attempts:
2 left
💡 Hint

Remember that preg_match finds only the first match.

Practice

(1/5)
1. What does the PHP function preg_match return when the pattern is found in the string?
easy
A. 1
B. 0
C. true
D. false

Solution

  1. Step 1: Understand preg_match return values

    The function preg_match returns 1 if the pattern matches the string.
  2. Step 2: Differentiate from no match

    If the pattern is not found, it returns 0, not true or false.
  3. Final Answer:

    1 -> Option A
  4. Quick Check:

    preg_match returns 1 if pattern found [OK]
Hint: Remember: preg_match returns 1 for match, 0 for no match [OK]
Common Mistakes:
  • Confusing return values with boolean true/false
  • Assuming preg_match returns the matched string
  • Thinking preg_match returns number of matches
2. Which of the following is the correct syntax to check if the string $text contains the word "hello" using preg_match?
easy
A. preg_match('hello', $text);
B. preg_match('/hello/', $text);
C. preg_match(/hello/, $text);
D. preg_match("/hello", $text);

Solution

  1. Step 1: Identify correct pattern delimiters

    Patterns in preg_match must be enclosed in quotes and slashes, like '/pattern/'.
  2. Step 2: Check each option's syntax

    preg_match('/hello/', $text); uses quotes and slashes correctly. preg_match('hello', $text); misses slashes. preg_match(/hello/, $text); misses quotes. preg_match("/hello", $text); misses closing slash.
  3. Final Answer:

    preg_match('/hello/', $text); -> Option B
  4. Quick Check:

    Pattern must be in quotes with slashes [OK]
Hint: Use quotes and slashes around pattern in preg_match [OK]
Common Mistakes:
  • Omitting quotes around the pattern
  • Omitting slashes around the pattern
  • Using wrong quote types inconsistently
3. What will be the output of the following PHP code?
$text = "apple123";
if (preg_match('/\d+/', $text)) {
echo "Digits found";
} else {
echo "No digits";
}
medium
A. Syntax error
B. No digits
C. Digits found
D. Empty output

Solution

  1. Step 1: Understand the pattern '/\d+/'

    The pattern \d+ matches one or more digits in the string.
  2. Step 2: Check if $text contains digits

    The string "apple123" contains digits "123", so preg_match returns 1 and the if condition is true.
  3. Final Answer:

    Digits found -> Option C
  4. Quick Check:

    Pattern \d+ matches digits, output is 'Digits found' [OK]
Hint: \d+ matches digits; check string for numbers [OK]
Common Mistakes:
  • Not escaping backslash properly in pattern
  • Assuming preg_match returns matched string
  • Confusing preg_match return with boolean true/false
4. The following code is intended to check if a string contains only letters. What is wrong with it?
$str = "Hello123";
if (preg_match('/^[a-zA-Z]+$/', $str)) {
echo "Only letters";
} else {
echo "Contains other characters";
}
medium
A. The pattern is correct but the string contains digits
B. Missing delimiters around the pattern
C. The pattern should use \w instead of [a-zA-Z]
D. preg_match should be preg_match_all

Solution

  1. Step 1: Analyze the pattern and string

    The pattern '/^[a-zA-Z]+$/' matches strings with only letters from start to end. The string "Hello123" contains digits, so it does not match.
  2. Step 2: Identify the actual problem

    The pattern is correct, but the string has digits, so the else branch runs.
  3. Final Answer:

    The pattern is correct but the string contains digits -> Option A
  4. Quick Check:

    Pattern matches only letters; digits cause no match [OK]
Hint: Check if string matches pattern exactly, not just pattern syntax [OK]
Common Mistakes:
  • Thinking pattern is wrong when string is the issue
  • Confusing preg_match with preg_match_all
  • Removing anchors ^ and $ incorrectly
5. You want to check if a string contains a valid email address using preg_match. Which pattern correctly matches a simple email format like 'user@example.com'?
hard
A. '/^[a-z]+@[a-z]+\.[a-z]{2,3}$/'
B. '/^[\d]+@[\d]+\.[\d]{2,4}$/'
C. '/\w+@\w+\.com/'
D. '/^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$/'

Solution

  1. Step 1: Understand email pattern requirements

    A simple email has letters, digits, dots, or dashes before and after '@', then a dot and 2-6 letter domain.
  2. Step 2: Evaluate each pattern

    '/^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$/' matches letters, digits, dots, dashes before and after '@', and domain with 2-6 letters. '/^[a-z]+@[a-z]+\.[a-z]{2,3}$/' is too restrictive (only lowercase letters, domain 2-3 letters). '/\w+@\w+\.com/' matches only '.com' domains and misses anchors. '/^[\d]+@[\d]+\.[\d]{2,4}$/' matches digits only, which is invalid for emails.
  3. Final Answer:

    '/^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$/' -> Option D
  4. Quick Check:

    '/^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$/' matches common email format correctly [OK]
Hint: Use \w, dots, dashes, and domain length for email pattern [OK]
Common Mistakes:
  • Not using anchors ^ and $ to match whole string
  • Restricting domain or username too much
  • Ignoring dots and dashes in username or domain
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