preg_match()分隔符错误(略有不同)

时间:2014-01-26 03:20:07

标签: php preg-match delimiter

有分隔符问题。我是PHP的菜鸟,所以如果这是一个非常简单的修复,我很抱歉。之前我正在使用eregi(),但我在这里检查了一个“已弃用”的错误,我发现我必须使用preg_match。无论如何,这是错误:

Warning: preg_match() [function.preg-match]: Delimiter must not be alphanumeric or backslash in /home/legitstr/public_html/members/includes/functions.php on line 4

这是我的代码:(之前我已经检查了其他线程,但似乎没有人有类似的代码)

$file = basename(__FILE__);
if(preg_match($file,$_SERVER['REQUEST_URI'])) {
die("Sorry but you cannot access this file directly for security reasons.");

请帮帮我,谢谢!

2 个答案:

答案 0 :(得分:2)

尝试:

$file = basename(__FILE__);
if(false !== strpos($_SERVER['REQUEST_URI'], $file)) {
die("Sorry but you cannot access this file directly for security reasons.");
  

strpos()

  

stripos函数()

对于不区分大小写的匹配,应该更适合您似乎正在做的事情

答案 1 :(得分:0)

你需要用分隔符包围你的正则表达式 - 通常类似于/myregex/

如果您不使用分隔符,则会出现此错误。你可以试试

if(preg_match($file,"|".$_SERVER['REQUEST_URI']."|")) {

由于|是合法分隔符,may not be used in a legal URL

话虽如此 - 正则表达式是一个强大的工具,如果你正在寻找一个逐字的匹配,它可能是矫枉过正。此外,URL中可能包含各种在regex中具有特殊含义的字符 - 这实际上会导致错误匹配。例如,正则表达式中的.表示“任何字符”,因此apple.com将匹配applescom,这可能不是您想要的。