Tech notes

Daily notes about my IT activities.

2011-07-03

Регулярные выражения, php и знак доллара

by hackprime

Внезапно обнаружил такой (-ую) баг (фичу). Если в php, в регулярном выражении нужно (для сравнения или замены), чтобы в самом выражении присутствовал символ $ (естественно, экранированный), то его в обязательном порядке нужно помещать в квадратные скобки, иначе соответствующий выражению входной текст не будет соответствовать ему.

проверено для PHP Version 5.3.1 под Windows 7

Пример такой:

var = "$3";
echo '<br>first regexp: ';
if (preg_match("/^\$[0-9]+$/", $var))
    echo 'passed';
else
    echo 'not passed';
echo '<br>second regexp: ';
if (preg_match("/^[\$]{1}[0-9]+$/", $var))
    echo 'passed';
else
    echo ' not passed';

Получим:

first regexp: not passed
second regexp: passed