2011-11-21 128 views
2

正則表達式不是我真正的東西。但我有我的PHP文件,並發現它不會工作,如果字符串傳遞有任何空格。有人可以提供修正請。如果有空格,這個正則表達式不起作用

正則表達式:

preg_match('/^(\S+)\/\d/', $_SERVER['HTTP_USER_AGENT'], $matches); 
$product_name = $matches[1]; 

字符串總是會在形式:

1productname/1.0.9 Sparkle/2 

一切斜槓後保持不變 前斜槓可以改變的,這就是部分我在尋找。

我發現,如果第一部分包含如空格:

1 product name/1.0.9 Sparkle/2 

這將打破。

回答

2

試試這個:/^(.+?)\/\d/

如果你並不想在值後匹配,試試這個:/^(.+?)\//

+0

謝謝大家的建議。因爲它與現有代碼最接近,所以我選擇了這個。 – Alchemy

1

正則表達式專門檢查非空格字符(\S)。既然你沒有提問,我會保持滿意,給你這個解釋。

它也是有道理的。期望用戶代理字符串中的空格分隔的某些/數字簽名列表是相當合理的。即使它們也經常以分號隔開,將空間視爲匹配的一部分是沒有意義的。

2

嘗試:

^(.+?)/ 

這應該捕捉你的第一部分。

0

如何/(.*?)/如果只想解析1productname/1.0.9旌宇/2,你開始尋找一個正斜槓,然後你閱讀介於第一個正斜槓和第二個正斜槓之間的每一個。

或者^(.*?)/如果你只是想讀1productname /1.0.9耀/ 2,空間或沒有空間