Bird
Raised Fist0
PHPprogramming~5 mins

Preg_replace for substitution in PHP

Choose your learning style10 modes available
Introduction

Preg_replace helps you find parts of text that match a pattern and replace them with new text. It is useful when you want to change or clean up text automatically.

You want to replace all phone numbers in a text with a placeholder.
You need to change date formats inside a string.
You want to remove or replace certain words or characters from user input.
You want to add a prefix or suffix to specific words in a sentence.
Syntax
PHP
<?php
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
?>

$pattern is the regular expression pattern to find.

$replacement is the text to replace the matched parts.

$subject is the text where the search and replace happens.

$limit controls how many replacements to make (default is all).

Examples
Replaces all groups of digits with the word 'NUMBER'.
PHP
<?php
$text = "Hello 123, call me at 555-1234.";
$new_text = preg_replace('/\d+/', 'NUMBER', $text);
echo $new_text;
?>
Replaces only the first occurrence of 'def' with 'xyz'.
PHP
<?php
$text = "abc def ghi";
$new_text = preg_replace('/def/', 'xyz', $text, 1);
echo $new_text;
?>
If no match is found, the original text stays the same.
PHP
<?php
$text = "No numbers here!";
$new_text = preg_replace('/\d+/', 'NUM', $text);
echo $new_text;
?>
Sample Program

This program finds phone numbers in the text and replaces them with the word '[PHONE]'. It prints the text before and after the change.

PHP
<?php
// Original text with phone numbers
$original_text = "Contact us at 123-456-7890 or 987-654-3210.";

// Show original text
echo "Before replacement:\n" . $original_text . "\n";

// Replace phone numbers with [PHONE]
$pattern = '/\d{3}-\d{3}-\d{4}/';
$replacement = '[PHONE]';
$modified_text = preg_replace($pattern, $replacement, $original_text);

// Show modified text
echo "After replacement:\n" . $modified_text . "\n";
?>
OutputSuccess
Important Notes

Time complexity depends on the length of the text and complexity of the pattern, usually O(n) where n is text length.

Space complexity is O(n) because a new string is created with replacements.

Common mistake: forgetting to escape special characters in the pattern (like \d for digits).

Use preg_replace when you need powerful pattern matching. For simple fixed string replacements, str_replace is faster.

Summary

preg_replace finds text matching a pattern and replaces it.

You can control how many replacements happen with the limit parameter.

It is useful for cleaning or formatting text automatically.

Practice

(1/5)
1. What does the PHP function preg_replace do?
easy
A. It splits a string into an array based on a pattern.
B. It counts how many times a pattern appears in a string.
C. It finds text matching a pattern and replaces it with new text.
D. It checks if a string matches a pattern and returns true or false.

Solution

  1. Step 1: Understand the purpose of preg_replace

    The function preg_replace searches a string for parts that match a pattern and replaces those parts with new text.
  2. Step 2: Compare with other functions

    Counting matches or splitting strings are done by other functions like preg_match_all or preg_split, not preg_replace.
  3. Final Answer:

    It finds text matching a pattern and replaces it with new text. -> Option C
  4. Quick Check:

    preg_replace replaces matched text [OK]
Hint: Remember: replace means find and change text [OK]
Common Mistakes:
  • Confusing preg_replace with preg_match
  • Thinking preg_replace counts matches
  • Mixing preg_replace with string splitting functions
2. Which of the following is the correct syntax to replace all digits with '#' in PHP using preg_replace?
easy
A. preg_replace('/\D/', '#', $text);
B. preg_replace('/d/', '#', $text);
C. preg_replace('/[0-9]+/', '#', $text);
D. preg_replace('/\d/', '#', $text);

Solution

  1. Step 1: Identify the pattern for digits

    The pattern '\d' matches any single digit (0-9). In PHP single-quoted strings, it is written as '/\d/'.
  2. Step 2: Check other options

    B uses '/d/', which matches the literal letter 'd'. C uses '/[0-9]+/', which matches one or more consecutive digits, replacing the entire group with a single '#'. D uses '/\D/', which matches non-digits.
  3. Final Answer:

    preg_replace('/\d/', '#', $text); -> Option D
  4. Quick Check:

    Use '\d' to match digits [OK]
Hint: Use '\d' to match digits in regex [OK]
Common Mistakes:
  • Forgetting to escape backslash in PHP strings
  • Using 'd' instead of '\d' for digits
  • Confusing '\d' with '\D' (non-digits)
3. What will be the output of the following PHP code?
$text = "Hello 123 World";
$result = preg_replace('/\d+/', 'NUM', $text);
echo $result;
medium
A. Hello NUM World
B. Hello 123 World
C. NUM NUM NUM World
D. Hello NUM123 World

Solution

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

    The pattern '\d+' matches one or more digits in a row. In the string, '123' matches this pattern.
  2. Step 2: Apply preg_replace to the string

    The matched digits '123' are replaced by 'NUM'. So the string becomes 'Hello NUM World'.
  3. Final Answer:

    Hello NUM World -> Option A
  4. Quick Check:

    Digits replaced by 'NUM' = Hello NUM World [OK]
Hint: Look for digit groups replaced by 'NUM' [OK]
Common Mistakes:
  • Thinking only single digits replaced separately
  • Expecting original digits to remain
  • Confusing pattern with non-digit matching
4. Identify the error in this PHP code snippet:
$text = "abc123def";
$result = preg_replace('/[a-z]/', 1, $text, 2);
echo $result;
medium
A. The limit parameter should be the third argument, not the fourth.
B. The replacement value must be a string, not an integer.
C. The pattern should be enclosed in double quotes, not single quotes.
D. preg_replace cannot limit replacements; the code is correct.

Solution

  1. Step 1: Check preg_replace argument order

    The arguments are: pattern, replacement, subject, limit. The limit is correctly the fourth argument.
  2. Step 2: Check replacement type

    The replacement should be a string. Using integer 1 will be converted to string '1' but is not recommended and can cause confusion.
  3. Step 3: Check other options

    Pattern can be in single quotes. preg_replace supports limit parameter.
  4. Final Answer:

    The replacement value must be a string, not an integer. -> Option B
  5. Quick Check:

    Replacement should be string [OK]
Hint: Always use string for replacement in preg_replace [OK]
Common Mistakes:
  • Passing integer instead of string as replacement
  • Misplacing the limit parameter
  • Thinking preg_replace can't limit replacements
5. You want to replace only the first two occurrences of the word 'apple' with 'orange' in the string 'apple banana apple apple grape'. Which preg_replace call achieves this?
hard
A. preg_replace('/apple/', 'orange', 'apple banana apple apple grape', 2);
B. preg_replace('/apple/', 'orange', 'apple banana apple apple grape');
C. preg_replace('/apple/', 'orange', 'apple banana apple apple grape', 3);
D. preg_replace('/apple/', 'orange', 'apple banana apple apple grape', 1);

Solution

  1. Step 1: Understand the limit parameter in preg_replace

    The fourth argument limits how many replacements happen. To replace only first two 'apple', limit should be 2.
  2. Step 2: Check each option's limit

    preg_replace('/apple/', 'orange', 'apple banana apple apple grape', 2); uses limit 2, so only first two 'apple' replaced. preg_replace('/apple/', 'orange', 'apple banana apple apple grape'); replaces all. preg_replace('/apple/', 'orange', 'apple banana apple apple grape', 3); replaces first three. preg_replace('/apple/', 'orange', 'apple banana apple apple grape', 1); replaces only first one.
  3. Final Answer:

    preg_replace('/apple/', 'orange', 'apple banana apple apple grape', 2); -> Option A
  4. Quick Check:

    Limit 2 replaces first two matches [OK]
Hint: Use limit parameter to control replacements count [OK]
Common Mistakes:
  • Omitting limit to replace all occurrences
  • Setting wrong limit number
  • Confusing order of arguments
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