How can I get at the matches when using preg_replace in PHP?

PhpRegexHtml ParsingPreg Replace

Php Problem Overview


I am trying to grab the capital letters of a couple of words and wrap them in span tags. I am using preg_replace for extract and wrapping purposes, but it's not outputting anything.

preg_replace("/[A-Z]/", "<span class=\"initial\">$1</span>", $str)

Php Solutions


Solution 1 - Php

You need to put the pattern in parentheses /([A-Z])/, like this:

preg_replace("/([A-Z])/", "<span class=\"initial\">$1</span>", $str)

Solution 2 - Php

\0 will also match the entire matched expression without doing an explicit capture using parenthesis.

preg_replace("/[A-Z]/", "<span class=\"initial\">\\0</span>", $str)

As always, you can go to php.net/preg_replace or php.net/<whatever search term> to search the documentation quickly. Quoth the documentation:

> \0 or $0 refers to the text matched by the whole pattern.

Solution 3 - Php

From the preg_replace documentation on php.net:

> replacement may contain references of > the form \n or (since PHP 4.0.4) $n, > with the latter form being the > preferred one. Every such reference > will be replaced by the text captured > by the n'th parenthesized pattern.

See Flubba's example.

Solution 4 - Php

Use parentheses around your desired capture.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionPolsonbyView Question on Stackoverflow
Solution 1 - PhpPolsonbyView Answer on Stackoverflow
Solution 2 - PhpJohn DouthatView Answer on Stackoverflow
Solution 3 - PhpWedgeView Answer on Stackoverflow
Solution 4 - PhpDinahView Answer on Stackoverflow