Doc #62756 [Opn]: preg documentation should mention '=' should not be first in character class
| From: | marco at greenlightsolutions dot nl | Date: | Mon, 06 Aug 2012 12:58:51 +0000 |
| Subject: | Doc #62756 [Opn]: preg documentation should mention '=' should not be first in character class | ||
| References: | 1 | Groups: | php.doc.bugs |
| Request: | Send a blank email to doc-bugs+get-8702@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=62756&edit=1
ID: 62756
User updated by: marco at greenlightsolutions dot nl
Reported by: marco at greenlightsolutions dot nl
Summary: preg documentation should mention '=' should not be
first in character class
Status: Open
Type: Documentation Problem
Package: Documentation problem
PHP Version: Irrelevant
Block user comment: N
Private report: N
New Comment:
You are right.
It actually was part of a compound expression, and I'd overlooked that the other parts were
also relevant. The following line generates the error message:
$x=preg_match("%[=~]|<[>=]%", "test");
(PHP 5.3.8, PCRE 8.13.2011-08-16).
Regardless, the documentation does not mention the '[=..=]' POSIX collating-element
construct. It does not mention the '=' symbol at all. This should be fixed in the
documentation. Ideally, the documentation should also contain the phrase 'POSIX collating
element', so that it appears as a search result when people search for the text of the error
message.
Previous Comments:
------------------------------------------------------------------------
[2012-08-06 12:32:59] salathe@php.net
[=~] should not be causing the warning, however [=abc=] and [.abc.] will.
------------------------------------------------------------------------
[2012-08-06 11:32:58] marco at greenlightsolutions dot nl
Description:
------------
---
From manual page: http://www.php.net/regexp.reference.character-classes
---
Briefly: The documentation for character classes should state that '=' after '['
is a reserved construct and should be avoided.
In detail:
If you put a '=' first in a character class in a perl regular expression, such as
'[=~]', in certain versions of PHP (including PHP 5.3.8) this will fail to compile, with a
warning "Compilation failed: POSIX collating elements are not supported". Rewriting it as
'[~=]' prevents the error message.
This is because the combination "[=" is seen as indicative of a "POSIX collating
element", a reserved, not-yet-implemented syntactical construct. A full description of the
cause was written up by Tom Christiansen at http://stackoverflow.com/questions/7173787/compilation-failed-posix-collating-elements-are-not-supported#7175589.
The 'preg character classes' documentation page should include the information that
'=' in the beginning of a character class is treated special, but it doesn't mention
the '=' sign at all.
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=62756&edit=1