Php - 分隔符不能是字母数字或反斜杠

时间:2013-04-25 08:23:50

标签: php

这个问题已被问到,但我不知道如何在我的情况下解决这个问题。我得到以下php错误:

  

PHP消息:PHP警告:preg_match():分隔符不能是......第227行的字母数字或反斜杠

第227行如下:

if (preg_match($Match, $_SERVER['HTTP_USER_AGENT']))

功能:

$OSList = array (
'Windows 3.11' => 'Win16',
'Windows 95' => '(Windows 95)|(Win95)|(Windows_95)',
'Windows 98' => '(Windows 98)|(Win98)',
'Windows 2000' => '(Windows NT 5.0)|(Windows 2000)',
'Windows XP' => '(Windows NT 5.1)|(Windows XP)',
'Windows Server 2003' => '(Windows NT 5.2)',
'Windows Vista' => '(Windows NT 6.0)',
'Windows 7' => '(Windows NT 7.0)',
'Windows NT 4.0' => '(Windows NT 4.0)|(WinNT4.0)|(WinNT)|(Windows NT)',
'Windows ME' => 'Windows ME',
'Open BSD' => 'OpenBSD',
'Sun OS' => 'SunOS',
'Linux' => '(Linux)|(X11)',
'Mac OS' => '(Mac_PowerPC)|(Macintosh)',
'QNX' => 'QNX',
'BeOS' => 'BeOS',
'OS/2' => 'OS/2'
);

foreach($OSList as $CurrOS=>$Match)
{

if (preg_match($Match, $_SERVER['HTTP_USER_AGENT']))
{
break;
}
}

2 个答案:

答案 0 :(得分:0)

确保对任何需要逃避的事物进行适当的逃脱。逃避

OS/2 to OS\/2 
7.0 to 7\.0 
etc.

。 /? *等等对于preg都是特殊的,所以你不应该在你的模式中使用它们,除非你逃脱它们或当你想要使用它们的“特殊能力”

更新:必须把它放在代码块中才能看到转义;)

答案 1 :(得分:0)

来自PHP Manual - Delimiters

  

使用PCRE功能时,需要使用模式   由分隔符括起来。分隔符可以是任何非字母数字,   非反斜杠,非空白字符。

     

经常使用的分隔符是正斜杠(/),哈希符号(#)和   波浪(〜)。以下是有效分隔的所有示例   图案。

/foo bar/
+php+ %[a-zA-Z0-9_-]%
#^[^0-9]$#