Documentation on preg_match and preg_match_all incorrectly describes meaning 
of offset parameter. Using offset parameter is NOT equivalent to passing 
substr($subject, $offset) to preg_match in place of the subject string.

Although I have karma to commit the patch, I would like it to be "approved" 
first, since I never commited to "en" tree.
Index: preg-match-all.xml
===================================================================
RCS file: /repository/phpdoc/en/reference/pcre/functions/preg-match-all.xml,v
retrieving revision 1.13
diff -u -r1.13 preg-match-all.xml
--- preg-match-all.xml  3 Aug 2004 15:51:10 -0000       1.13
+++ preg-match-all.xml  12 Oct 2004 06:35:21 -0000
@@ -131,13 +131,23 @@
     <para>
      Normally, the search starts from the beginning of the subject string. The
      optional parameter <parameter>offset</parameter> can be used to specify
-     the alternate place from which to start the search. It is equivalent to
-     passing <function>substr</function>($subject, $offset) to
-     <function>preg_match</function> in place of the subject string.
+     the alternate place from which to start the search.
      The <parameter>offset</parameter> parameter is available since
      <literal>PHP</literal> 4.3.3.
     </para>
 
+    <note>
+     <para>
+      Using <parameter>offset</parameter> is not equivalent to
+      passing <function>substr</function>($subject, $offset) to
+      <function>preg_match_all</function> in place of the subject string,
+      because <parameter>pattern</parameter> can contain assertions such as
+      <emphasis>^</emphasis>, <emphasis>$</emphasis> or
+      <emphasis>(?&lt;=x)</emphasis>. See <function>preg_match</function> for
+      examples.
+     </para>
+    </note>
+    
     <para>
      Returns the number of full pattern matches (which might be zero),
      or &false; if an error occurred.
Index: preg-match.xml
===================================================================
RCS file: /repository/phpdoc/en/reference/pcre/functions/preg-match.xml,v
retrieving revision 1.15
diff -u -r1.15 preg-match.xml
--- preg-match.xml      10 Aug 2004 16:30:20 -0000      1.15
+++ preg-match.xml      12 Oct 2004 06:35:24 -0000
@@ -51,12 +51,71 @@
     <para>
      Normally, the search starts from the beginning of the subject string. The
      optional parameter <parameter>offset</parameter> can be used to specify
-     the alternate place from which to start the search. It is equivalent to
-     passing <function>substr</function>($subject, $offset) to
-     <function>preg_match</function> in place of the subject string.
+     the alternate place from which to start the search.
      The <parameter>offset</parameter> parameter is available since
      PHP 4.3.3.
     </para>
+    <note>
+     <para>
+      Using <parameter>offset</parameter> is not equivalent to
+      passing <function>substr</function>($subject, $offset) to
+      <function>preg_match</function> in place of the subject string, because
+      <parameter>pattern</parameter> can contain assertions such as
+      <emphasis>^</emphasis>, <emphasis>$</emphasis> or
+      <emphasis>(?&lt;=x)</emphasis>. Compare :
+     </para>
+     <informalexample>
+      <programlisting role="php">
+<![CDATA[
+<?php
+    $subject = "abcdef";
+    $pattern = '/^def/';
+    preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3);
+    print_r($matches);
+?>
+]]>
+      </programlisting>
+      <para>
+       will produce
+      </para>
+      <screen>
+<![CDATA[
+Array
+(
+)
+]]>
+      </screen>
+      <para>
+       and
+      </para>
+      <programlisting role="php">
+<![CDATA[
+<?php
+    $subject = "abcdef";
+    $pattern = '/^def/';
+    preg_match($pattern, substr($subject,3), $matches, PREG_OFFSET_CAPTURE);
+    print_r($matches);
+?>
+]]>
+      </programlisting>
+      <para>
+       will produce
+      </para>
+      <screen>
+<![CDATA[
+Array
+(
+    [0] => Array
+        (
+            [0] => def
+            [1] => 0
+        )
+
+)
+]]>
+      </screen>
+     </informalexample>
+    </note>
 
     <para>
      <function>preg_match</function> returns the number of times 

Reply via email to