PHP - 将ereg转换为preg_match但它仍然出错

时间:2014-01-03 22:07:37

标签: php preg-match

我已将所有文件从ereg转换为preg_match,但我仍然遇到一行问题。我用分隔符进行了多项更改,将单引号更改为“double”,将backslashed和forward向前削减,并且仍然抛出此错误:

Warning: preg_match() [function.preg-match]: Unknown modifier 'b' in /home/casper13/public_html/youbetcha/core/core.template.php on line 2267

原始代码:

$cache_override = array('member');

    foreach ($cache_override as $val)
    {
        if (ereg('^/'.$val.'/', $IN->URI))
        {
            $query->row['cache'] = 'n';
        }
    }

我已将ereg行更新为:

if (preg_match('@^/@'.$val.'/', $IN->URI))

此外:

if (preg_match("@^/@".$val.'/', $IN->URI))

此外:

if (preg_match('@\^/@'.$val.'/', $IN->URI))

我尝试了很多不同的方法,但仍然是同样的错误。不是PHP的程序员,但我已经在网上进行了研究,虽然我修复了100行,但这个不行。你能给老gal一个线索吗?

2 个答案:

答案 0 :(得分:0)

Perl正则表达式的分隔符应位于模式的开头和结尾处,后者可选地后跟修饰符字符。

if (preg_match('@^/'.$val.'/@', $IN->URI))

应该可以正常工作,前提是你的$ val不包含@字符(否则你必须转义它,或为正则表达式选择不同的分隔符)。

答案 1 :(得分:0)

看起来像分隔符混音。分隔符必须是正则表达式中的第一个和最后一个字符(后面只有可选的修饰符)。您的正则表达式以@开头,并以/结束,这将无效。试试这个(使用|作为分隔符,只要$val中不存在,你就可以选择你想要的内容):

if (preg_match("|^/$val/|", $IN->URI));