Bug #64145 [Opn->Nab]: preg_match return false for using (\$)
Edit report at https://bugs.php.net/bug.php?id=64145&edit=1
ID: 64145
Updated by: krakjoe@php.net
Reported by: mrsnikivan at gmail dot com
Summary: preg_match return false for using (\$)
-Status: Open
+Status: Not a bug
Type: Bug
Package: PCRE related
Operating System: window
PHP Version: 5.3.21
Block user comment: N
Private report: N
New Comment:
The pattern you gave is never going to match the token provided, [A-Ia-i] will
never match sum; I assume the token has been provided incorrect:
<?php
$token='$a1:$a1';
var_dump(preg_match("/^(\\$)?[A-Ia-i]?[A-Za-z](\\$)?[0-9]+:(\\$)?[A-Ia-i]?[A-Za-
z](\\$)?[0-9]+$/",$token, $matches));
print_r($matches);
?>
You need to escape $ twice when using double quotes.
<?php
$token='$a1:$a1';
var_dump(preg_match('/^(\$)?[A-Ia-i]?[A-Za-z](\$)?[0-9]+:(\$)?[A-Ia-i]?[A-Za-z]
(\$)?[0-9]+$/',$token, $matches));
print_r($matches);
?>
Both examples function as expected.
Previous Comments:
------------------------------------------------------------------------
[2013-02-04 19:30:36] mrsnikivan at gmail dot com
Description:
------------
I using worksheet de pear(library parse.php, found problem for preg_match)
$token='=sum($a1:$a1);
if
(preg_match("/^(\$)?[A-Ia-i]?[A-Za-z](\$)?[0-9]+:(\$)?[A-Ia-i]?[A-Za-z](\$)?[0-9]+$/",$token))
{
...
}
no true
$token='=sum(a1:a1);
if
(preg_match("/^(\$)?[A-Ia-i]?[A-Za-z](\$)?[0-9]+:(\$)?[A-Ia-i]?[A-Za-z](\$)?[0-9]+$/",$token))
{
...
}
is true
Test script:
---------------
$ change another different character and no problem sample @
$token='=sum(@a1:@a1);
if
(preg_match("/^(\@)?[A-Ia-i]?[A-Za-z](\@)?[0-9]+:(\@)?[A-Ia-i]?[A-Za-z](\@)?[0-9]+$/",$token))
{
...
}
After trying other caracters I found that the problem is that the $ replace internal a point (.)
character 46
$token='=sum($a1:$a1);
if
(preg_match("/^(.)?[A-Ia-i]?[A-Za-z](.)?[0-9]+:(.)?[A-Ia-i]?[A-Za-z](.)?[0-9]+$/",$token))
{
...
}
here if there was affirmative result for dollar ($) and point (.)
Expected result:
----------------
true for (\$) for preg_match
Actual result:
--------------
false for (\$) for preg_match
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=64145&edit=1
Thread (2 messages)