Bird
Raised Fist0
PHPprogramming~5 mins

Preg_match for pattern matching in PHP

Choose your learning style10 modes available
Introduction

Preg_match helps you check if a text matches a pattern. It finds if a word or format is inside a string.

Checking if an email address is valid.
Finding if a phone number is in the right format.
Searching for a specific word in a sentence.
Validating user input like passwords or usernames.
Syntax
PHP
<?php
$pattern = '/pattern/';
$text = 'some text';
if (preg_match($pattern, $text)) {
    // code if pattern found
} else {
    // code if pattern not found
}
?>

The pattern is written between slashes /pattern/.

Preg_match returns 1 if it finds the pattern, 0 if not.

Examples
This checks if the word 'cat' is in the text.
PHP
<?php
$pattern = '/cat/';
$text = 'I have a cat.';
if (preg_match($pattern, $text)) {
    echo 'Found cat!';
} else {
    echo 'No cat here.';
}
?>
Empty text means no match found.
PHP
<?php
$pattern = '/dog/';
$text = '';
if (preg_match($pattern, $text)) {
    echo 'Found dog!';
} else {
    echo 'No dog here.';
}
?>
This checks if the text starts with 'hello'.
PHP
<?php
$pattern = '/^hello/';
$text = 'hello world';
if (preg_match($pattern, $text)) {
    echo 'Text starts with hello';
} else {
    echo 'Text does not start with hello';
}
?>
Sample Program

This program checks two texts to see if they contain any numbers using preg_match.

PHP
<?php
// Pattern to check if text contains a number
$pattern = '/\d+/';
$text_before = 'My phone number is 12345.';
$text_after = 'No numbers here.';

// Check first text
if (preg_match($pattern, $text_before)) {
    echo "Before: Number found in text.\n";
} else {
    echo "Before: No number found in text.\n";
}

// Check second text
if (preg_match($pattern, $text_after)) {
    echo "After: Number found in text.\n";
} else {
    echo "After: No number found in text.\n";
}
?>
OutputSuccess
Important Notes

Time complexity is usually fast, depends on pattern complexity.

Space complexity is low, just stores match info.

Common mistake: forgetting to escape special characters in pattern.

Use preg_match when you want to check if a pattern exists once. Use preg_match_all to find all matches.

Summary

Preg_match checks if a pattern exists in a string.

It returns 1 if found, 0 if not.

Patterns are written between slashes, like /pattern/.

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