2013-04-25 34 views
-5

這個問題已被問到,但我不知道如何解決這個問題在我的情況。我得到了下面的PHP errror: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; 
} 
} 
+0

看:http://stackoverflow.com/questions/7660545/delimiter-must-not-be-alphanumeric-or-backslash-and-preg-match?rq=1下一次嘗試使用Google第一... – Ihsan 2013-04-25 08:28:31

+0

沒有任何問題的代碼的努力。你基本上是要求爲你完成代碼。請提出具體問題。按提交之前,搜索它。 – hakre 2013-04-25 08:28:54

回答

0

確保做正確的逃避任何需要逃跑的東西。所以逃跑

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

。 /? *等等都是特殊的preg,所以你不應該在你的模式中使用它們,除非你逃脫它們或當你想使用他們的「特殊權力」

更新:必須把它放在代碼塊中才能看到轉義; )

0

PHP Manual - Delimiters

當使用PCRE函數,它要求該圖案是通過 定界符包圍。分隔符可以是任何非字母數字的非反斜槓字符,非空白字符。

經常使用的分隔符是正斜槓(/),散列符號(#)和 (〜)。以下是有效分隔的 模式的所有示例。

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