2013-07-03 2 views
0

Я продолжаю получать сообщение об ошибке при использовании этого, и я не уверен, почему. Любая помощь будет потрясающей. У меня есть Googled это и нашел примеры, но я получаю ошибку даже с примерами других народов.preg_match() error пытается сопоставить переменную

$statement = $list[$i]; 
echo $statement; 
preg_match("/$statement/i", $q) 

Я также попытался это и ни работа:

$statement = '/' . $list[$i] . '/i'; 
echo $statement; 
preg_match($statement, $q) 

Я получаю ошибку является:

Предупреждение: preg_match() [function.preg матча]: Компиляция не удалось: ничего не повторять со смещением 0

Когда я выхожу из $statement, я получаю: "/Who/i" (без котировок)

+2

Ну, скажите нам содержание '$ statement', но, скорее всего, вы ищете' preg_quote'. – Wrikken

+0

@Wrikken Я отредактировал сообщение, так что вы видите, что такое оператор $. –

ответ

3

Удостоверьтесь, что все, что находится в $statement, фактически произведет регулярное выражение VALID, например.

$statement = '(a|'; // note lack of closing) 
preg_match("/$statement/", $text); 

будет на самом деле производят регулярное выражение

/(a|/ 

который является недействительным, так как нет никакого закрытия ), чтобы закончить группу захвата. Вы можете обойти эту проблему с:

$statement = preg_quote('(a|'); 
      ^^^^^^^^^^ 

который будет избежать каких-либо регулярных выражений метасимволов, чтобы вы предъявить действительное регулярное выражение в конце концов.

По существу, вы, вероятно, страдаете от эквивалента регулярного выражения атаки SQL-инъекции.

+0

Спасибо за отличную помощь! –

Смежные вопросы