Re: regular expressions
| From: | Michael Sims | Date: | Sun, 06 Jan 2002 04:22:57 +0000 |
| Subject: | Re: regular expressions | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-79594@lists.php.net to get a copy of this message | ||
At 10:16 PM 1/5/2002 -0500, Gerard Samuel wrote:
Need some help with this one. Dont know where to begin. I have content in a string and a constant that changes depending on if yourre in the root or in a directory. The purpose of the constant is to provide dynamic links. The string will have href links like <a href="index.php">Index</a> I want to figure out a way to inject my constant value into the href like so <a href="'._CONSTANT'index.php">Index</a> I would like the rules to say, If string contains <href="> and there are <alphanumerical chars> .php place _CONSTANT between <href="> and <alphanumerical chars> I figure a regular expression, but I have no idea where to start..This seems to work: <? define("_CONSTANT","/path/"); $string = "Click <a href=\"index.php\">here</a> to return to the main page."; echo insertpath($string); function insertpath($string) {
return preg_replace("/(<a href=\")(.*\">.*<\/a>)/i","$1"._CONSTANT."$2",$string);
}
?>
Preg_replace allows you to use backreferences and access them via variables such as $1 and $2, etc. Earlier versions of PHP required you to use \\1, \\2 instead (see the documentation for preg_replace for more info). Each section of the regex that is in parenthesis can be accessed. In the above example, the (<a href=\") section is reprinted in the replacement string by using $1, so on a so forth. The ".*" in the regex basically means match "any old junk" since the "." refers to any single character and the "*" means match the previous character zero or more times.
http://download.php.net/manual/en/function.preg-replace.php