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.';
}
?>
<?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 textif (preg_match($pattern, $text_before)) {
echo"Before: Number found in text.\n";
} else {
echo"Before: No number found in text.\n";
}
// Check second textif (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
Step 1: Understand preg_match return values
The function preg_match returns 1 if the pattern matches the string.
Step 2: Differentiate from no match
If the pattern is not found, it returns 0, not true or false.
Final Answer:
1 -> Option A
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
Step 1: Identify correct pattern delimiters
Patterns in preg_match must be enclosed in quotes and slashes, like '/pattern/'.
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
Step 1: Understand the pattern '/\d+/'
The pattern \d+ matches one or more digits in the string.
Step 2: Check if $text contains digits
The string "apple123" contains digits "123", so preg_match returns 1 and the if condition is true.
Final Answer:
Digits found -> Option C
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
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.
Step 2: Identify the actual problem
The pattern is correct, but the string has digits, so the else branch runs.
Final Answer:
The pattern is correct but the string contains digits -> Option A
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
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.
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.
Final Answer:
'/^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$/' -> Option D
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 unknownstrongwhile earning +1 Grip toward your certificate.