2 回答

TA贡献1796条经验 获得超4个赞
假设比赛信息与您在此处显示的一样一致, preg_match 函数将适用于此。这是一个示例代码片段:
$str = '02/07/2019 - RACE 2 SHANE MURPHY PAINTING 366M';
if ( preg_match( '/^([0-9]{2}\/[0-9]{2}\/[0-9]{4}) - RACE ([0-9]{1,}) (.*) ([0-9]{3,}M)$/', $str, $matches ) ) {
echo "Race number: ${matches[2]}\n";
echo "Race date: ${matches[1]}\n";
echo "Race name: ${matches[3]}\n";
echo "Race length ${matches[4]}\n";
} else {
echo "Cannot parse the string\n";
}
这将产生以下输出:
Race number: 2
Race date: 02/07/2019
Race name: SHANE MURPHY PAINTING
Race length 366M
请注意,括号“()”中的匹配最终会出现在传递给 preg_match 函数的 $matches 数组中。像往常一样,在线提供更多信息:https : //www.php.net/manual/en/function.preg-match.php

TA贡献1811条经验 获得超6个赞
有两种主要方法,第一种是使用正则表达式...
使用([\d\/]{10,}) - RACE (\d*) ([\w ]*) (\d*M)
将匹配:
([\d\/]{10,})
10 个数字和 / - 的组合,即日期。- RACE (\d*)
这是文字 RACE 后跟数字比赛编号。([\w ]*)
这是名称的字母(和空格)序列(\d*M)
一个数字后跟文字 M。
所以代码是...
$row = ['race_name' => '28/07/2019 - RACE 2 WYNNUM HAULAGE Maiden F 366M'];
preg_match("/([\d\/]{10,}) - RACE (\d*) ([\w ]*) (\d*M)/",
$row['race_name'],
$race_info);
echo "Race number: {$race_info[2]} <br>";
echo "Race date: {$race_info[1]} <br>";
echo "Race name: {$race_info[3]}<br>";
// need to find last word ending in M (e.g. 600M, 1200M, 40M)
echo "Race length: {$race_info[4]} <br>";
或者,您可以坚持使用爆炸并确定哪些部分是哪些。您已经有了日期和比赛编号,最后一个将是距离,并且比赛编号和距离之间的所有位都重新连接在一起以给出比赛名称...
$row = ['race_name' => '28/07/2019 - RACE 2 WYNNUM HAULAGE Maiden F 366M'];
$race_info = explode(" ",$row['race_name']);
echo "Race number: {$race_info[3]} <br>";
echo "Race date: {$race_info[0]} <br>";
$length = count($race_info);
// need to find race name (in middle of the string)
$name = implode(" ", array_slice($race_info, 4, $length-5));
echo "Race name: {$name}<br>";
// need to find last word ending in M (e.g. 600M, 1200M, 40M)
echo "Race length: {$race_info[$length - 1]} <br>";
- 2 回答
- 0 关注
- 129 浏览
添加回答
举报