过滤mysql搜索的文本

时间:2011-04-20 09:09:44

标签: php mysql regex filter

我是regex的新手,真的没有线索。 我有一个看起来像这样的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“字符”之间。 种类是“L”或“G”。 Tally是一个介于1和6之间的int。

这张桌子应该包含我学校的所有课程/课程。 当你写出类名时,它看起来像“11EL4”或“11ML1”。

我希望能够将这个“描述”转化为年级,主题,种类和统计。 例如:

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

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

我的猜测可能是正则表达式,但我真的不知道它是如何工作的(甚至在教程之后)

3 个答案:

答案 0 :(得分: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})匹配1-6
  • 范围内的单个数字

$dummy是必需的,因为$match[0]将保持整个正则表达式匹配。元素1-4将保存每个已获专利的子字符串。

答案 1 :(得分: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);
}

答案 2 :(得分: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.