PHP 正则表达式替换 preg_replace 函数

<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 /> &lt;?php<br /> $str = &quot;The quick brown fox jumped over the lazy dog.&quot;;<br /> $str = preg_replace('/\s/','-',$str);<br /> echo $str;<br /> ?&gt;<br /> 输出结果为:<br /> The-quick-brown-fox-jumped-over-the-lazy-dog.<br /> 例子 2 ,使用数组:<br /> &lt;?php<br /> $str = &quot;The quick brown fox jumped over the lazy dog.&quot;;</p> <p>$patterns[0] = &quot;/quick/&quot;;<br /> $patterns[1] = &quot;/brown/&quot;;<br /> $patterns[2] = &quot;/fox/&quot;;</p> <p>$replacements[2] = &quot;bear&quot;;<br /> $replacements[1] = &quot;black&quot;;<br /> $replacements[0] = &quot;slow&quot;;</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 /> ?&gt;<br /> 例子 3 ,使用逆向引用:<br /> &lt;?php<br /> $str = '&lt;a href=&quot;<a href="http://www.5idev.com/&quot;&gt;5idev&lt;/a">http://www.5idev.com/&quot;&gt;5idev&lt;/a</a>&gt;其他字符&lt;a href=&quot;<a href="http://www.sohu.com/&quot;&gt;sohu&lt;/a&gt;'">http://www.sohu.com/&quot;&gt;sohu&lt;/a&gt;'</a>;<br /> $pattern = &quot;/&lt;a\s([\s\S]*?)&gt;([\s\S]*?)&lt;\/a&gt;/i&quot;;<br /> print preg_replace($pattern, '\\2', $str);<br /> ?&gt;<br /> 输出结果为:<br /> 5idev其他字符sohu<br /> 该例子演示了将文本中所有的 &lt;a&gt;&lt;/a&gt; 标签去掉。</p>
RangeTime:0.005943s
RangeMem:207.64 KB
返回顶部 留言