preg_match():编译失败:缺少)

The error is:

PHP Warning: preg_match(): Compilation failed: missing ) at offset 16 in /home/siteraja/public_html/ar/wp-content/plugins/hide_my_wp/lib/mute-screamer/libraries/IDS/Monitor.php on line 312 And here's the code at line 227:

  // check if this field is part of the exceptions
        if (is_array($this->exceptions)) {
            foreach($this->exceptions as $exception) {
                $matches = array();
                $reg = '/'.str_replace('%','[A-Za-z0-9_-]*', str_replace('.','\.',$exception)).'/i';
                if (preg_match($reg, $key))
                    return false;


            }
        }

You are using a variable to initialize a regex pattern. Without knowing what characters there may be inside that string, you cannot be sure the regex syntax will be correct. To eliminate this risk, use preg_quote that will escape (=add \) in front of each special character. So, replace

$reg = '/'.str_replace('%','[A-Za-z0-9_-]*', str_replace('.','\.',$exception)).'/i';

with

$reg = '/'.str_replace('%','[A-Za-z0-9_-]*', preg_quote($exception)).'/i';

Also please note you only declare $matches = array();, but you are not using it, but that is perhaps just because you do not show the whole code.