我是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,...);
}
我的猜测可能是正则表达式,但我真的不知道它是如何工作的(甚至在教程之后)
答案 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)
与L
或G
([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.