RE: [PHP] PCRE false match with preg_match?
| From: | Murray @ PlanetThoughtful | Date: | Mon, 26 Sep 2005 14:30:59 +0000 |
| Subject: | RE: [PHP] PCRE false match with preg_match? | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-223193@lists.php.net to get a copy of this message | ||
> I recently encountered a strange behaviour, could someone please
> countercheck it, to either tell me there is an error in my pattern?
>
> I have a test string: "7005-N/52"
> I have two match patterns: a) "/([0-9]*)\/(.*)/i"
> b) "/([0-9]*)\-(.*)/i"
> I check the test string with the help of preg_match, and they both
> matched, but normally variant a) shouldn't have matched.
>
> Normally I test my patterns with the tool "The Regex Coach", and
> according to this tool it shouldn't have matched.
> PHP version is 5.0.4, PCRE extension version is 4.5 01-December-2003
Hi Jens
Your first pattern 'matches' because it finds a hit on the "/52" component
of your test string.
If you look at the pattern itself, it's because you're using the
'zero-or-more-occurrences' quantifier (ie "*") in the first part of your
pattern: "([0-9]*)".
It's a valid hit, because there are zero incidences of numeric characters
immediately prior to the "/52" component of the test string.
Changing the "*" to a "+" (at least one or more occurrences) could
'fix'
that pattern (ie so that it doesn't match your string), depending on any
other values being tested by it.
Much warmth,
Murray
---
"Lost in thought..."
http://www.planetthoughtful.org