<p>PHP 正则表达式替换 preg_replace 函数<br />
正则替换<br />
preg_replace() 函数用于正则表达式的搜索和替换。<br />
语法:<br />
mixed preg_replace( mixed pattern, mixed replacement, mixed subject [, int limit ] ) <br />
参数说明:<br />
参数说明<br />
pattern正则表达式<br />
replacement替换的内容<br />
subject需要匹配替换的对象<br />
limit可选,指定替换的个数,如果省略 limit 或者其值为 -1,则所有的匹配项都会被替换<br />
补充说明<br />
replacement 可以包含 <a href="file://\\n">\\n</a> 形式或 $n 形式的逆向引用,首选使用后者。每个此种引用将被替换为与第 n 个被捕获的括号内的子模式所匹配的文本。n 可以从 0 到 99,其中 <a href="file://\\0">\\0</a> 或 $0 指的是被整个模式所匹配的文本。对左圆括号从左到右计数(从 1 开始)以取得子模式的数目。<br />
对替换模式在一个逆向引用后面紧接着一个数字时(如 <a href="file://\\11">\\11</a>),不能使用 \\ 符号来表示逆向引用。因为这样将会使 preg_replace() 搞不清楚是想要一个 <a href="file://\\1">\\1</a> 的逆向引用后面跟着一个数字 1 还是一个 <a href="file://\\11">\\11</a> 的逆向引用。解决方法是使用 \${1}1。这会形成一个隔离的 $1 逆向引用,而使另一个 1 只是单纯的文字。<br />
上述参数除 limit 外都可以是一个数组。如果 pattern 和 replacement 都是数组,将以其键名在数组中出现的顺序来进行处理,这不一定和索引的数字顺序相同。如果使用索引来标识哪个 pattern 将被哪个 replacement 来替换,应该在调用 preg_replace() 之前用 ksort() 函数对数组进行排序。<br />
例子 1 :<br />
<?php<br />
$str = "The quick brown fox jumped over the lazy dog.";<br />
$str = preg_replace('/\s/','-',$str);<br />
echo $str;<br />
?><br />
输出结果为:<br />
The-quick-brown-fox-jumped-over-the-lazy-dog.<br />
例子 2 ,使用数组:<br />
<?php<br />
$str = "The quick brown fox jumped over the lazy dog.";</p>
<p>$patterns[0] = "/quick/";<br />
$patterns[1] = "/brown/";<br />
$patterns[2] = "/fox/";</p>
<p>$replacements[2] = "bear";<br />
$replacements[1] = "black";<br />
$replacements[0] = "slow";</p>
<p>print preg_replace($patterns, $replacements, $str);<br />
/*输出:<br />
The bear black slow jumped over the lazy dog.<br />
*/<br />
ksort($replacements);<br />
print preg_replace($patterns, $replacements, $str);<br />
/*输出:<br />
The slow black bear jumped over the lazy dog.<br />
*/<br />
?><br />
例子 3 ,使用逆向引用:<br />
<?php<br />
$str = '<a href="<a href="http://www.5idev.com/">5idev</a">http://www.5idev.com/">5idev</a</a>>其他字符<a href="<a href="http://www.sohu.com/">sohu</a>'">http://www.sohu.com/">sohu</a>'</a>;<br />
$pattern = "/<a\s([\s\S]*?)>([\s\S]*?)<\/a>/i";<br />
print preg_replace($pattern, '\\2', $str);<br />
?><br />
输出结果为:<br />
5idev其他字符sohu<br />
该例子演示了将文本中所有的 <a></a> 标签去掉。</p>