我已将所有文件从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一个线索吗?
答案 0 :(得分:0)
Perl正则表达式的分隔符应位于模式的开头和结尾处,后者可选地后跟修饰符字符。
if (preg_match('@^/'.$val.'/@', $IN->URI))
应该可以正常工作,前提是你的$ val不包含@字符(否则你必须转义它,或为正则表达式选择不同的分隔符)。
答案 1 :(得分:0)
看起来像分隔符混音。分隔符必须是正则表达式中的第一个和最后一个字符(后面只有可选的修饰符)。您的正则表达式以@
开头,并以/
结束,这将无效。试试这个(使用|
作为分隔符,只要$val
中不存在,你就可以选择你想要的内容):
if (preg_match("|^/$val/|", $IN->URI));