RE: preg_match() is returning inaccurate result
| From: | Jānis Elmeris | Date: | Tue, 23 Apr 2024 08:44:24 +0000 |
| Subject: | RE: preg_match() is returning inaccurate result | ||
| References: | 1 2 3 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-328404@lists.php.net to get a copy of this message | ||
In more detail,
\$third gets de-escaped when the double-quoted string is parsed. And
the regular expression parser is left with just $third.
If you use \\$third, \\ gets de-escaped to \ and
$third is treated as a variable (not what you want).
If you use \\\$third, then the regular expression parser gets both \ and
$ preserved, which is what you want: \$third.
Your second example returned TRUE because $third was actually evaluated to
an empty string, and 'xyz$third-party' does end with -party
indeed.
This second example probably triggered a warning, too - about an undefined variable
$third. So I suggest you pay attention to PHP warnings and notices as well, as that
would have probably lead you to the right direction when trying to understand what was happening.
Regards,
Janis
________________________________
No: Jigar Dhulla <jigar.tidus@gmail.com>
Nosūtīts: otrdiena, 2024. gada 23. aprīlis 08:02
Kam: php-general@lists.php.net <php-general@lists.php.net>
Tēma: Re: preg_match() is returning inaccurate result
On Tue, Apr 23, 2024 at 8:02 AM <0xabeef@riseup.net<mailto:0xabeef@riseup.net>> wrote:
PHP8.3.4
Can someone help? preg_match() is acting weird about \$ and \^.
var_dump(preg_match("/\$third-party$/",'xyz$third-party')?true:false);//
returns FALSE, really expecting TRUE here!
var_dump(preg_match("/$third-party$/",'xyz$third-party')?true:false);//
returns TRUE???
^ and $ must escape if it is not in beginning/ending position.
Isn't this correct?
At least Javascript is answering correctly.
/\$third-party$/.test('xyz$third-party'); // TRUE
/$third-party$/.test('xyz$third-party'); // FALSE
Hi,
double quotes ("") around a string are evaluating $third as a variable in the
first argument.
Use single quotes ('') instead.
var_dump(preg_match('/\$third-party$/','xyz$third-party')?true:false);
var_dump(preg_match('/$third-party$/','xyz$third-party')?true:false);
Playground: https://onlinephp.io/c/52068