2016-02-15 2 views
1
if (preg_match('/['.$i_word.']*()*['.$p_word.']*/', $string, $match)){ 
echo "<br>"; 
echo "more positive comment"; 

У меня такая же ошибка. Здесь я привязываю, чтобы соответствовать двум переменным, соответствует ли моя строка строке или нет. Но получаю ошибку: Предупреждение: preg_match(): Компиляция не удалось: отсутствует терминатор] для класса символов со смещением 16preg_match(): Ошибка компиляции: отсутствует завершение] для класса символов

+4

Что содержимое '$ i_word' и' $ p_word'? Вы уверены, что в них нет специальных символов регулярных выражений? Попробуйте 'var_dump ('/['.$ i_word.'] *() * ['. $ P_word.'] */');' Перед if и отредактируйте результаты в вашу очередь. – Terminus

+1

Содержимое является строкой и не содержит специального регулярного выражения. –

+0

, тогда я не могу представить, почему это произойдет. Просто для удовольствия, ссылка на полезную функцию: http://php.net/manual/en/function.preg-quote.php – Terminus

ответ

0

Либо $i_word или $p_word содержит [ или заканчивается \ и это делает первый аргумент preg_match() недопустимое регулярное выражение ,

Использование preg_quote() с $i_word и $p_word производить правильные фрагменты регулярных выражений из них:

$regex = '/['.preg_quote($i_word, '/').']*()*['.preg_quote($p_word, '/').']*/'; 
if (preg_match($regex, $string, $match)) { 
    // success 
}