RE: preg_match() is returning inaccurate result

From: 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

« previous php.general (#328404) next »