Try it yourself with our free Regex Tester tool — runs entirely in your browser, no signup needed.

How to Use regex to replace in PHP

How to use regex to replace in PHP

Regular expressions (regex) are a powerful tool for text processing in PHP. One of the most common use cases for regex is replacing text patterns in a string. In this article, we'll explore how to use regex to replace text in PHP, covering the basics, edge cases, common mistakes, and performance tips.

Quick Example

Here's a minimal example that demonstrates how to use regex to replace text in PHP:

$string = 'Hello, world!';
$pattern = '/world/';
$replacement = 'PHP';
echo preg_replace($pattern, $replacement, $string); // Output: Hello, PHP!

This code uses the preg_replace function to replace the first occurrence of the pattern /world/ with the replacement string 'PHP' in the input string $string.

Step-by-Step Breakdown

Let's walk through the code line by line:

  1. $string = 'Hello, world!';: This line defines the input string that we want to modify.
  2. $pattern = '/world/';: This line defines the regex pattern that we want to match. The pattern /world/ matches the literal string "world".
  3. $replacement = 'PHP';: This line defines the replacement string that we want to use.
  4. echo preg_replace($pattern, $replacement, $string);: This line uses the preg_replace function to replace the first occurrence of the pattern in the input string with the replacement string. The preg_replace function returns the modified string, which we echo to the output.

Handling Edge Cases

Empty/Null Input

What happens if the input string is empty or null? In this case, the preg_replace function will return an empty string or null, respectively.

$string = '';
$pattern = '/world/';
$replacement = 'PHP';
echo preg_replace($pattern, $replacement, $string); // Output: ''

$string = null;
echo preg_replace($pattern, $replacement, $string); // Output: null

To handle this case, you can add a simple check before calling preg_replace:

if ($string !== null && $string !== '') {
    echo preg_replace($pattern, $replacement, $string);
} else {
    echo 'Input string is empty or null';
}

Invalid Input

What happens if the input string is not a string at all, but an array or an object? In this case, the preg_replace function will throw a warning or a fatal error, depending on the PHP version.

$string = array('foo' => 'bar');
$pattern = '/world/';
$replacement = 'PHP';
echo preg_replace($pattern, $replacement, $string); // Warning: preg_replace(): Argument #1 must be a string

To handle this case, you can add a simple type check before calling preg_replace:

if (is_string($string)) {
    echo preg_replace($pattern, $replacement, $string);
} else {
    echo 'Input is not a string';
}

Large Input

What happens if the input string is very large? In this case, the preg_replace function may consume a lot of memory and CPU resources. To handle this case, you can use the preg_replace_callback function, which allows you to process the input string in chunks.

$string = str_repeat('Hello, world!', 10000);
$pattern = '/world/';
$replacement = 'PHP';
echo preg_replace_callback($pattern, function ($match) use ($replacement) {
    return $replacement;
}, $string);

Unicode/Special Characters

What happens if the input string contains Unicode or special characters? In this case, the preg_replace function may not work correctly, depending on the regex pattern and the PHP version.

$string = 'Hello, café!';
$pattern = '/café/';
$replacement = 'coffee';
echo preg_replace($pattern, $replacement, $string); // Output: Hello, coffee!

To handle this case, you can use the u modifier in the regex pattern to enable Unicode support.

$pattern = '/café/u';

Common Mistakes

Mistake 1: Not escaping special characters

One common mistake is not escaping special characters in the regex pattern.

$pattern = '/.*/'; // wrong
$pattern = '/\.\*/'; // correct

Mistake 2: Not using the u modifier for Unicode support

Another common mistake is not using the u modifier for Unicode support.

$pattern = '/café/'; // wrong
$pattern = '/café/u'; // correct

Mistake 3: Not checking the input type

A third common mistake is not checking the input type before calling preg_replace.

$string = array('foo' => 'bar');
echo preg_replace($pattern, $replacement, $string); // wrong
if (is_string($string)) {
    echo preg_replace($pattern, $replacement, $string);
} else {
    echo 'Input is not a string';
} // correct

Performance Tips

Tip 1: Use the preg_replace function instead of preg_match and str_replace

The preg_replace function is generally faster than using preg_match and str_replace separately.

// slow
if (preg_match($pattern, $string)) {
    echo str_replace($pattern, $replacement, $string);
}

// fast
echo preg_replace($pattern, $replacement, $string);

Tip 2: Use the preg_replace_callback function for large input strings

The preg_replace_callback function allows you to process the input string in chunks, which can be faster for large input strings.

// slow
echo preg_replace($pattern, $replacement, $string);

// fast
echo preg_replace_callback($pattern, function ($match) use ($replacement) {
    return $replacement;
}, $string);

Tip 3: Use the preg_quote function to escape special characters

The preg_quote function can help you escape special characters in the regex pattern.

$pattern = preg_quote($pattern, '/');

FAQ

Q: What is the difference between preg_replace and str_replace?

preg_replace uses regex patterns to replace text, while str_replace uses literal strings.

Q: How do I enable Unicode support in the regex pattern?

Use the u modifier in the regex pattern.

Q: How do I handle large input strings?

Use the preg_replace_callback function to process the input string in chunks.

Q: How do I escape special characters in the regex pattern?

Use the preg_quote function to escape special characters.

Q: What is the performance difference between preg_replace and preg_match + str_replace?

preg_replace is generally faster than using preg_match and str_replace separately.

AI agent tools available. The CodeTidy MCP Server gives Claude, Cursor, and other AI agents access to 60+ developer tools. One command: npx @codetidy/mcp