Приветствую всех. Есть база данных PGSQL со списком регулярных выражений по которым необходимо осуществлять поиск совпадений. Подставляю выражение из базы в переменную, затем в preg_match и не работает... добавляю руками - работает. Выражение хранится в базе в поле 'mask', в виде '/[aAbB][\daAbB]:[aAbB][\daAbB]/' Выражений много и будут добавляться. Хранятся как varchar. Примеры: Не работает: $a = pg_result($resultmatch,0,'mask'); $b = "a1:b1"; if (preg_match($a,$b)) { echo "1"; } else { echo "0"; } Работает: $a = '/[aAbB][\daAbB]:[aAbB][\daAbB]/'; $b = "a1:b1"; if (preg_match($a,$b)) { echo "1"; } else { echo "0"; } Почему? Может в данном примере с ковычками накосячил, но сути не меняет, если из базы подставляю не фурычит... ручками вбиваю работает.
Во время написания, обычно все переменные раcпечатываю. Поменял тип переменной на $a=(string)$a; также не помогает. и $b=(string)$b; тоже попробовал.
$a = pg_result($resultmatch,0,'mask'); die($a); $b = "a1:b1"; if (preg_match($a,$b)) { echo "1"; } else { echo "0"; } и посмотри что пишет
В результате обращения к базе комадной $resultmatch, я получаю массив (если несколько совпадений то многомерный но в данном случае совпадение одно) из которого комадной pg_result из "0" нулевой строки, забираю значение поля 'mask'. Сделал проще, создал маску '/a1:b1/' не находит совпадений!
severuga ППЦ. храни в базе без кавычек. а ещё погугли по флагам для регулярки, особенно про игнорирование регистра, чтобы не писать [aA], достаточно просто a
Я сосздал маку в нижнем регистре без ковычек a1:b1 запихнул в базу. Изменил программу: $a = pg_result($resultmatch,0,'mask'); $b = "a1:b1"; if (preg_match('/$a/',$b)) { echo "1"; } else { echo "0"; } не работает!
severuga переменные внутри одинарных кавычек не интерпретируются. сделай так: if (preg_match("/$a/",$b)) { echo "1"; } (сообщение было отмодерировано, стёрто 8 строчек мата)
Итить заработало! Спасибо Gromo, учту для себя на будущее что с этим могут быть проблемы. Но я тоже не просто так их использовал, куча примеров на php.net именно с одинарными кавычками, у меня во многих приложениях работают именно в одинарными кавычками. Ещё раз спасибо!
severuga если внутри строки пишешь переменную, то строку нужно заключать в двойные кавычки! $text = 'abc' echo 'here is the $text'; // here is the $text echo 'here is the '.$text; // here is the abc echo "here is the $text"; // here is the abc