There are many ways to replace strings in PHP. str_replace is the most common. For more complex ones, the preg_replace method may also be used.
In addition to regularity, these two methods (str_replace and preg_replace) also have a disgusting difference in the issue of loop replacement. Let’s take a look at their respective syntax descriptions first:
str_replace
mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )
preg_replace
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
Obviously there are more preg_replaces in the optional parameter list A limit item, this limit item controls the number of string replacement operations.
Then the question is, now we need to implement the following requirement, replace the two {module} in the following code with different strings:
If you use the str_replace method, one replacement operation cannot replace only one {module} string.
If you use the preg_replace method, you will find that this will cause a fatal bug, such as the following code:
$replace = '$12.34';
$ subject = 'Pay {replace} for it.';
echo preg_replace('/{replace}/', $replace, $subject);
?>
The output result is:
Pay .34 for it.
Instead of the expected:
Pay $12.34 for it.
The reason is because the second parameter of preg_replace has a back reference Question:
replacement can contain back references\n or (available in PHP 4.0.4 and above)$n, the latter is preferred syntactically. Each such reference will be replaced by the text captured by the nth matching capturing subgroup. n can be 0-99, \0 and $0 represent the complete pattern matching text. The serial number counting method of capturing subgroups is: the left bracket representing the capturing subgroup is counted from left to right, starting from 1. If you want to use backslashes in replacement, you must use 4 ("\\", translator's annotation: Because this is first a PHP string, after escaping, it is two, and then it is considered by the regular expression engine is an original backslash).
To avoid this problem, there are two solutions:
First, use the entity character ($) for the $ symbol to avoid conflicts with the PHP language.
The second method is to use strpos combined with substr_replace. For example:
$start = strpos($str, '{module}');
$str = substr_replace($str, 'http://www.mangguo.org', $start, sizeof ('{module}'));
Reference:
[1] http://php.net/manual/zh/function.str-replace.php
[2] http:// php.net/manual/zh/function.preg-replace.php
http://www.bkjia.com/PHPjc/363791.htmlwww.bkjia.comtruehttp: //www.bkjia.com/PHPjc/363791.htmlTechArticleThere are many ways to replace strings in PHP. str_replace is very common, and more complex ones may also be used. Use the preg_replace method. These two methods (str_replace and pre...