Home > Backend Development > PHP Tutorial > About string replacement and back references of preg_replace function_PHP tutorial

About string replacement and back references of preg_replace function_PHP tutorial

WBOY
Release: 2016-07-21 14:58:41
Original
760 people have browsed it

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:



{module}


{module}


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

www.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...
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template