cvs: phpdoc /en/reference/pcre/functions preg-replace.xml

From: Date: Sun, 27 Mar 2005 12:38:20 +0000
Subject: cvs: phpdoc /en/reference/pcre/functions preg-replace.xml
Groups: php.doc 
Request: Send a blank email to phpdoc+get-969367111@lists.php.net to get a copy of this message
nlopess Sun Mar 27 07:38:20 2005 EDT Modified files: /phpdoc/en/reference/pcre/functions preg-replace.xml Log: switch to new style and document the new count parameter #an english reviewer wanted.. :)

http://cvs.php.net/diff.php/phpdoc/en/reference/pcre/functions/preg-replace.xml?r1=1.15&r2=1.16&ty=u Index: phpdoc/en/reference/pcre/functions/preg-replace.xml diff -u phpdoc/en/reference/pcre/functions/preg-replace.xml:1.15 phpdoc/en/reference/pcre/functions/preg-replace.xml:1.16 --- phpdoc/en/reference/pcre/functions/preg-replace.xml:1.15 Sat Mar 12 15:29:57 2005 +++ phpdoc/en/reference/pcre/functions/preg-replace.xml Sun Mar 27 07:38:19 2005 @@ -1,28 +1,25 @@ <?xml version="1.0" encoding="iso-8859-1"?> -<!-- $Revision: 1.15 $ --> +<!-- $Revision: 1.16 $ --> <!-- splitted from ./en/functions/pcre.xml, last change in rev 1.2 --> <refentry id="function.preg-replace"> <refnamediv> <refname>preg_replace</refname> <refpurpose>Perform a regular expression search and replace</refpurpose> </refnamediv> - <refsect1> - <title>Description</title> + <refsect1 role="description"> + &reftitle.description; <methodsynopsis> <type>mixed</type><methodname>preg_replace</methodname> <methodparam><type>mixed</type><parameter>pattern</parameter></methodparam> <methodparam><type>mixed</type><parameter>replacement</parameter></methodparam> <methodparam><type>mixed</type><parameter>subject</parameter></methodparam> <methodparam choice="opt"><type>int</type><parameter>limit</parameter></methodparam> + <methodparam choice="opt"><type>int</type><parameter role="reference">count</parameter></methodparam> </methodsynopsis> <para> Searches <parameter>subject</parameter> for matches to <parameter>pattern</parameter> and replaces them with - <parameter>replacement</parameter>. If - <parameter>limit</parameter> is specified, then only - <parameter>limit</parameter> matches will be replaced; if - <parameter>limit</parameter> is omitted or is -1, then all - matches are replaced. + <parameter>replacement</parameter>. </para> <para> <parameter>Replacement</parameter> may contain references of the form @@ -48,21 +45,191 @@ as a literal. </para> <para> + If <parameter>subject</parameter> is an array, then the search + and replace is performed on every entry of + <parameter>subject</parameter>, and the return value is an array + as well. + </para> + <para> + The <literal>e</literal> modifier makes <function>preg_replace</function> + treat the <parameter>replacement</parameter> parameter as PHP code after + the appropriate references substitution is done. Tip: make sure that + <parameter>replacement</parameter> constitutes a valid PHP code string, + otherwise PHP will complain about a parse error at the line containing + <function>preg_replace</function>. + </para> +</refsect1> + +<refsect1 role="parameters"> + &reftitle.parameters; + <para> + <variablelist> + <varlistentry> + <term><parameter>pattern</parameter></term> + <listitem> + <para> + The pattern to search for. It can be either a string or an array with + strings. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><parameter>replacement</parameter></term> + <listitem> + <para> + The string or an array with strings to replace. If this parameter is a + string and the <parameter>pattern</parameter> parameter is an array, + all pattens will be replaced by that string. If both + <parameter>pattern</parameter> and <parameter>replacement</parameter> + parameters are arrays, each <parameter>pattern</parameter> will be + replaced by the <parameter>replacement</parameter> counterpart. If + there are less keys in the <parameter>replacement</parameter> array + than in the <parameter>pattern</parameter> array, the excedent + <parameter>pattern</parameter>s will be replaced by an empty string. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><parameter>subject</parameter></term> + <listitem> + <para> + The string or an array with strings to search and replace. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><parameter>limit</parameter></term> + <listitem> + <para> + The maximum possible replacements for each pattern in each + <parameter>subject</parameter> string. Defaults to + <literal>-1</literal> (no limit). + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><parameter>count</parameter></term> + <listitem> + <para> + If specified, this variable will be filled with the number of + replacements done. + </para> + </listitem> + </varlistentry> + </variablelist> + </para> + </refsect1> + + <refsect1 role="returnvalues"> + &reftitle.returnvalues; + <para> + <function>preg_replace</function> returns an array if the + <parameter>subject</parameter> parameter is an array, or a string + otherwise. + </para> + <para> + If matches are found, the new <parameter>subject</parameter> will + be returned, otherwise <parameter>subject</parameter> will be + returned unchanged. + </para> + </refsect1> + + <refsect1 role="changelog"> + &reftitle.changelog; + <para> + <informaltable> + <tgroup cols="2"> + <thead> + <row> + <entry>&Version;</entry> + <entry>&Description;</entry> + </row> + </thead> + <tbody> + <row> + <entry>4.0.1pl2</entry> + <entry> + Added the <parameter>limit</parameter> parameter + </entry> + </row> + <row> + <entry>4.0.4</entry> + <entry> + Added the '$n' form for the <parameter>replacement</parameter> parameter + </entry> + </row> + <row> + <entry>5.1.0</entry> + <entry> + Added the <parameter>count</parameter> parameter + </entry> + </row> + </tbody> + </tgroup> + </informaltable> + </para> + </refsect1> + + <refsect1 role="examples"> + &reftitle.examples; + <para> + <example> + <title>Convert HTML to text</title> + <programlisting role="php"> +<![CDATA[ +<?php +// $document should contain an HTML document. +// This will remove HTML tags, javascript sections +// and white space. It will also convert some +// common HTML entities to their text equivalent. +$search = array ('@<script[^>]*?>.*?</script>@si', // Strip out javascript + '@<[\/\!]*?[^<>]*?>@si', // Strip out HTML tags + '@([\r\n])[\s]+@', // Strip out white space + '@&(quot|#34);@i', // Replace HTML entities + '@&(amp|#38);@i', + '@&(lt|#60);@i', + '@&(gt|#62);@i', + '@&(nbsp|#160);@i', + '@&(iexcl|#161);@i', + '@&(cent|#162);@i', + '@&(pound|#163);@i', + '@&(copy|#169);@i', + '@&#(\d+);@e'); // evaluate as php + +$replace = array ('', + '', + '\1', + '"', + '&', + '<', + '>', + ' ', + chr(161), + chr(162), + chr(163), + chr(169), + 'chr(\1)'); + +$text = preg_replace($search, $replace, $document); +?> +]]> + </programlisting> + </example> + </para> + <para> <example> <title>Using backreferences followed by numeric literals</title> <programlisting role="php"> <![CDATA[ <?php -$string = "April 15, 2003"; -$pattern = "/(\w+) (\d+), (\d+)/i"; -$replacement = "\${1}1,\$3"; +$string = 'April 15, 2003'; +$pattern = '/(\w+) (\d+), (\d+)/i'; +$replacement = '${1}1,$3'; echo preg_replace($pattern, $replacement, $string); ?> ]]> </programlisting> - <para> - This example will output : - </para> + &example.outputs; <screen> <![CDATA[ April1,2003 @@ -71,42 +238,23 @@ </example> </para> <para> - If matches are found, the new <parameter>subject</parameter> will - be returned, otherwise <parameter>subject</parameter> will be - returned unchanged. - </para> - <para> - Every parameter to <function>preg_replace</function> (except - <parameter>limit</parameter>) can be an unidimensional array. - When using arrays with <parameter>pattern</parameter> and - <parameter>replacement</parameter>, the keys are processed in the order - they appear in the array. This is <emphasis>not necessarily</emphasis> - the same as the numerical index order. If you use indexes to identify - which <parameter>pattern</parameter> should be replaced by which - <parameter>replacement</parameter>, you should perform a - <function>ksort</function> on each array prior to calling - <function>preg_replace</function>. - </para> - <para> <example> <title>Using indexed arrays with <function>preg_replace</function></title> <programlisting role="php"> <![CDATA[ <?php -$string = "The quick brown fox jumped over the lazy dog."; -$patterns[0] = "/quick/"; -$patterns[1] = "/brown/"; -$patterns[2] = "/fox/"; -$replacements[2] = "bear"; -$replacements[1] = "black"; -$replacements[0] = "slow"; +$string = 'The quick brown fox jumped over the lazy dog.'; +$patterns[0] = '/quick/'; +$patterns[1] = '/brown/'; +$patterns[2] = '/fox/'; +$replacements[2] = 'bear'; +$replacements[1] = 'black'; +$replacements[0] = 'slow'; echo preg_replace($patterns, $replacements, $string); ?> ]]> </programlisting> - <para> - Output: - </para> + &example.outputs; <screen> <![CDATA[ The bear black slow jumped over the lazy dog. @@ -124,9 +272,7 @@ ?> ]]> </programlisting> - <para> - Output : - </para> + &example.outputs; <screen> <![CDATA[ The slow black bear jumped over the lazy dog. @@ -135,47 +281,19 @@ </example> </para> <para> - If <parameter>subject</parameter> is an array, then the search - and replace is performed on every entry of - <parameter>subject</parameter>, and the return value is an array - as well. - </para> - <para> - If <parameter>pattern</parameter> and <parameter>replacement</parameter> - are arrays, then <function>preg_replace</function> takes a value from - each array and uses them to do search and replace on - <parameter>subject</parameter>. If <parameter>replacement</parameter> - has fewer values than <parameter>pattern</parameter>, then empty string - is used for the rest of replacement values. If <parameter>pattern - </parameter> is an array and <parameter>replacement</parameter> is a - string, then this replacement string is used for every value of - <parameter>pattern</parameter>. The converse would not make sense, - though. - </para> - <para> - The <literal>e</literal> modifier makes <function>preg_replace</function> - treat the <parameter>replacement</parameter> parameter as PHP code after - the appropriate references substitution is done. Tip: make sure that - <parameter>replacement</parameter> constitutes a valid PHP code string, - otherwise PHP will complain about a parse error at the line containing - <function>preg_replace</function>. - </para> - <para> <example> <title>Replacing several values</title> <programlisting role="php"> <![CDATA[ <?php -$patterns = array ("/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/", - "/^\s*{(\w+)}\s*=/"); -$replace = array ("\\3/\\4/\\1\\2", "$\\1 ="); -echo preg_replace($patterns, $replace, "{startDate} = 1999-5-27"); +$patterns = array ('/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/', + '/^\s*{(\w+)}\s*=/'); +$replace = array ('\3/\4/\1\2', '$\1 ='); +echo preg_replace($patterns, $replace, '{startDate} = 1999-5-27'); ?> ]]> </programlisting> - <para> - This example will produce: - </para> + &example.outputs; <screen> <![CDATA[ $startDate = 5/27/1999 @@ -190,8 +308,8 @@ <![CDATA[ <?php preg_replace("/(<\/?)(\w+)([^>]*>)/e", - "'\\1'.strtoupper('\\2').'\\3'", - $html_body); + "'\\1'.strtoupper('\\2').'\\3'", + $html_body); ?> ]]> </programlisting> @@ -202,41 +320,17 @@ </para> <para> <example> - <title>Convert HTML to text</title> + <title>Strip whitespace</title> + <para> + This example strips excess whitespace from a string. + </para> <programlisting role="php"> <![CDATA[ <?php -// $document should contain an HTML document. -// This will remove HTML tags, javascript sections -// and white space. It will also convert some -// common HTML entities to their text equivalent. -$search = array ("'<script[^>]*?>.*?</script>'si", // Strip out javascript - "'<[\/\!]*?[^<>]*?>'si", // Strip out HTML tags - "'([\r\n])[\s]+'", // Strip out white space - "'&(quot|#34);'i", // Replace HTML entities - "'&(amp|#38);'i", - "'&(lt|#60);'i", - "'&(gt|#62);'i", - "'&(nbsp|#160);'i", - "'&(iexcl|#161);'i", - "'&(cent|#162);'i", - "'&(pound|#163);'i", - "'&(copy|#169);'i", - "'&#(\d+);'e"); // evaluate as php -$replace = array ("", - "", - "\\1", - "\"", - "&", - "<", - ">", - " ", - chr(161), - chr(162), - chr(163), - chr(169), - "chr(\\1)"); -$text = preg_replace($search, $replace, $document); +$str = 'foo o'; +$str = preg_replace('/\s\s+/', ' ', $str); +// This will be 'foo o' now +echo $str; ?> ]]> </programlisting> @@ -244,31 +338,52 @@ </para> <para> <example> - <title>Strip whitespace</title> - <para> - This example strips excess whitespace from a string. - </para> + <title>Using the <parameter>count</parameter> parameter</title> <programlisting role="php"> <![CDATA[ <?php -$str = 'foo o'; -$str = preg_replace('/\s\s+/', ' ', $str); -// This will be 'foo o' now -echo $str; +$count = 0; + +echo preg_replace(array('/\d/', '/\s/'), '*', 'xp 4 to', -1 , $count); +echo $count; //3 ?> ]]> </programlisting> + &example.outputs; + <screen> +<![CDATA[ +xp***to +3 +]]> + </screen> </example> </para> + </refsect1> + + <refsect1 role="notes"> + &reftitle.notes; <note> <para> - Parameter <parameter>limit</parameter> was added after PHP 4.0.1pl2. + When using arrays with <parameter>pattern</parameter> and + <parameter>replacement</parameter>, the keys are processed in the order + they appear in the array. This is <emphasis>not necessarily</emphasis> the + same as the numerical index order. If you use indexes to identify which + <parameter>pattern</parameter> should be replaced by which + <parameter>replacement</parameter>, you should perform a + <function>ksort</function> on each array prior to calling + <function>preg_replace</function>. </para> </note> + </refsect1> + + <refsect1 role="seealso"> + &reftitle.seealso; <para> - See also <function>preg_match</function>, - <function>preg_match_all</function>, and - <function>preg_split</function>. + <simplelist> + <member><function>preg_match</function></member> + <member><function>preg_replace_callback</function></member> + <member><function>preg_split</function></member> + </simplelist> </para> </refsect1> </refentry>
« previous php.doc (#969367111) next »