How can I get at the matches when using preg_replace in PHP?
PhpRegexHtml ParsingPreg ReplacePhp 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.