2011-04-20 57 views
1

我是新來的正則表達式,真的沒有線索。 我有一個MySQL表看起來像這樣:mysql搜索的過濾文本

id | grade | subject | kind | tally 
1 | 11 | M  | L | 1 
2 | 11 | E  | L | 3 
3 | 11 | D  | G | 1 
4 | 11 | GK  | G | 1 
5 | 11 | SPA  | G | 6 

你的想法... :)

級是一個int,無論是11,12或13 主題是一個字符串,之間1 -4「chars」長。 類型是「L」或「G」。 Tally是一個int,介於1和6之間。

此表應該包含所有在我學校的課程/課程。 當你寫出類名時,它看起來像這樣的「11EL4」或「11ML1」。

我希望能夠將這個「描述」轉化爲等級,主題,種類和計數。 例如:

function descriptionToArray($description){ 
    // $grade = regex voodoo :) 
    // $subject = regex voodoo :) 
    // ... 

    return array("grade"=>$grade,"subject"=>$subject,...); 
} 

我的猜測會一直正則表達式,但我真的不知道如何工作的,如果你想提取檔次,不同的變量,以主題或實物(即使教程)

+0

我通過閱讀http://gskinner.com/RegExr/的不同選項descrptions與玩弄學會正則表達式表示工具。如果你花時間玩它,效率非常高。 – Maritim 2012-12-06 07:23:43

回答

3

嘗試這種情況:

if (preg_match('/(11|12|13)([A-Z]{1-4})(L|G)([1-6]{1})/', $class_string, $match)) { 
    list($dummy, $grade, $subject, $kind, $tally) = $match; 
} 

說明:

  • (11|12|13)匹配11,12或13
  • ([A-Z]+?)匹配1個或多個大寫字母(ungreedy )
  • (L|G)匹配的LG
  • ([1-6]{1})一個單一的數字,因爲$match[0]將容納整個正則表達式匹配1-6

$dummy的需要的範圍內相匹配。元素1-4將保存每個專有子字符串。

+0

這看起來相當不錯,但是當我輸入內容時它總是返回錯誤:( – JNK 2011-04-20 09:41:32

+0

嘗試preg_match_all,因爲在某些行中有多個相同的字符。 – 2011-04-20 09:48:17

+0

仍然沒有... :( – JNK 2011-04-20 10:09:59

0

那麼爲什麼不使用mysql_query來獲取這些變量呢。 如果您想從表中的數據創建類名,那麼從mysql_query獲取這些變量並連接以形成您的類名。 並使其成爲一個數組將這些變量放入數組中。

例如:

//establish the mysql connection and select the database. 

$query = mysql_query("SELECT * FROM class"); //Where class is your table name 

while ($row = mysql_fetch_array($query)) { return array($row["grade"], $row["subject"], $row["kind"]); } 

//Then use that array for whatever you want to use it for. Also assign a variable to it to use it outside the while loop. 
+0

lateron我想獲取描述的ID。例如:idOfDesc(「11EL3」)= 2。爲此,我將需要不同的部分... – JNK 2011-04-20 09:25:07

+0

然後使用implode來形成所有值的一行。然後使用explode來形成字符串中每個值的數組。爲了使其可用,請在for或while循環中執行此操作,並在每個字符串中分配一個變量,然後遞增到新變量的下一個數字。 – 2011-04-20 09:33:36

+0

這隻適用於每部分長度爲1個字符的情況。我會使用哪種膠水和分離器?...我想你錯過了我的問題... – JNK 2011-04-20 09:38:07

1

沒有太多的巫術,沒有正則表達式還挺簡單的解決方案可能是:

function descriptionToArray($description){ 
    $grade = substr($description, 0, 2); 
    $subject = substr($description, 2, strlen($description)-4); 
    $kind = substr($description, -2, -1); 
    $tally = substr($description, -1); 

    return array("grade" => $grade, "subject" => $subject, "kind" => $kind, "tally" => $tally); 
}