复杂的正则表达式请求 - 需要来自字符串的三个变量

我正在尝试像以下三个示例一样分解字符串数据:

  • 02/07/2019 - 第 2 场 SHANE MURPHY 绘画 366M

  • 28/07/2019 - RACE 2 WYNNUM HAULAGE Maiden F 366M

  • 01/12/2011 - 第 1 场 MCGUIGAN WINES POKOLBIN MAIDEN 400M

并用子集填充表信息。

因为所有的字符串都以相同的方式开始,所以我设法提取了比赛日期 [0] 和比赛编号 [3]。

我看过正则表达式,但我不确定如何提取比赛名称和比赛长度。

使用上面的例子提取的种族名称应该是:

  • 肖恩墨菲绘画

  • WYNNUM HAULAGE Maiden F

  • 麦圭根葡萄酒波科尔宾少女

提取的比赛距离应该是:

  • 366M

  • 366M

  • 400M

有没有一种简单的方法可以使用 PHP 从字符串中生成这些数据?我需要同时使用正则表达式和爆炸吗?请问有什么建议吗?

我能够提取日期和比赛编号,因为它们位于字符串的顶部,但由于 Race X 等后面的空格,我无法提取其他变量。

$race_info = explode(" ",$row['race_name']);


echo "Race number: {$race_info[3]} <br>";

echo "Race date: {$race_info[0]} <br>";

// need to find race name (in middle of the string)

echo "Race name: ";

// need to find last word ending in M (e.g. 600M, 1200M, 40M)

echo "Race length: ";


largeQ
浏览 130回答 2
2回答

SMILET

假设比赛信息与您在此处显示的一样一致, 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 ) ) {&nbsp; &nbsp; &nbsp; &nbsp; echo "Race number: ${matches[2]}\n";&nbsp; &nbsp; &nbsp; &nbsp; echo "Race date: ${matches[1]}\n";&nbsp; &nbsp; &nbsp; &nbsp; echo "Race name: ${matches[3]}\n";&nbsp; &nbsp; &nbsp; &nbsp; echo "Race length ${matches[4]}\n";} else {&nbsp; &nbsp; &nbsp; &nbsp; echo "Cannot parse the string\n";}这将产生以下输出:Race number: 2Race date: 02/07/2019Race name: SHANE MURPHY PAINTINGRace length 366M请注意,括号“()”中的匹配最终会出现在传递给 preg_match 函数的 $matches 数组中。像往常一样,在线提供更多信息:https : //www.php.net/manual/en/function.preg-match.php

杨魅力

有两种主要方法,第一种是使用正则表达式...使用([\d\/]{10,}) - RACE (\d*) ([\w ]*) (\d*M)将匹配:([\d\/]{10,})&nbsp;10 个数字和 / - 的组合,即日期。- RACE (\d*)&nbsp;这是文字 RACE 后跟数字比赛编号。([\w ]*)&nbsp;这是名称的字母(和空格)序列(\d*M)&nbsp;一个数字后跟文字 M。所以代码是...$row = ['race_name' => '28/07/2019 - RACE 2 WYNNUM HAULAGE Maiden F 366M'];preg_match("/([\d\/]{10,}) - RACE (\d*) ([\w ]*) (\d*M)/",&nbsp;&nbsp; &nbsp; $row['race_name'],&nbsp; &nbsp; $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>";
打开App,查看更多内容
随时随地看视频慕课网APP