2013-03-05 80 views
1

我創造了一些內聯網的軟件,並確定哪個房間號和PC號電腦是我使用的REMOTE_HOST服務器陣列。問題一個字符串匹配正則表達式

這裏是我的代碼:

$hostname = $_SERVER['REMOTE_HOST']; 
//Check to see if the computer name is compatible with room auto-detect 
if (preg_match("/G|F\d{1,2}-.*?-PC\d{1,2}.*?/i", $hostname)) { 
    $room = explode("-", $hostname); 
    $pc = explode(".", $room[2]); 
} else { 
    $pc[0] = "NA"; 
    $room[0] = "other"; 
} 

這statment必須是真實的,如果計算機名稱的類似:

  • g22-dell-pc23.roundhay.local
  • f48-lenovo-pc02.roundhay.local
  • g6-asus-pc18.roundhay.local

如果語句並不像上述那麼它需要恢復的房間和PC陣列娜等。

我可以提取房間號和PC成功,但是當使用非標準名稱的PC使用的軟件,它仍然會嘗試提取信息,並因爲它沒有信息去軟件失敗。

例如:

G22-smartboard.roundhay.local

該軟件仍試圖獲得PC數量,即使它dosent符合我的正則表達式。但是我的測試PC與計算機名稱JOSH的PC上,它並回落到默認信息。

我過我的正則表達式,它似乎只要名稱以無論是G或F.一個

開始我需要它來專門滿足這些要求是真實的:

  • 第一個字母爲G或F
  • 然後無論是從0的一個或兩個數字 - 9
  • 然後, -
  • 接着的字母az
  • 任何量
  • 接着一個 -
  • 然後字母PC
  • 然後無論是從0一個或兩個數字 - 9
  • 然後什麼

我已經嘗試了各種不同的人得到這個工作,但我只是不不理解正則表達式。我已經看過它,但它太混亂了。

回答

1

正則表達式:

/[g|f]\d{1,2}-[a-z]+-pc\d{1,2}.+/i 

應該工作。我使用http://gskinner.com/RegExr/來構建表達式。

+0

慣於在'()'創建捕獲?並添加到他的數組? – Cjueden 2013-03-05 19:42:19

+0

@Cjueden當然。 * facepalms – 2013-03-05 19:45:10

+0

@Cjueden編輯。過了一段時間,因爲我已經使用RegExp這個複雜的。大學的工作真的讓你忘記了事情。 :P – 2013-03-05 19:47:21