我有一个下面看到的格式的字符串,想要提取以下数据: - 主队 - 客场球队 - 主队得分 - 客队得分
我已经设法找到了主场得分和得分,但是我很难得到球队的名字。
$str = " 20.45 Manchester United 4-2 Bayer Leverkusen";
preg_match('/(\d)-(\d)/', $str, $matches);
提前致谢。
答案 0 :(得分:0)
如果文本总是相似,字段之间有多个空格,那么你可以利用它。
[A-Z](?: ?\S)*
将匹配以大写字母开头的字符串,后跟非空白字符,它们之间至多有一个空格。它只会匹配直到有两个连续的空格。
所以你可以说
$str = " 20.45 Manchester United 4-2 Bayer Leverkusen";
# Having it separate makes things less noisy and more self-documenting, IMO.
# But you can do the same thing inline if you want.
$team_name = '[A-Z](?: ?\S)*';
preg_match("/($team_name) +(\d+)-(\d+) +($team_name)$/", $str, $matches));
var_dump($matches);
并且输出(在控制台中,无论如何)看起来像
array(5) {
[0]=>
string(40) "Manchester United 4-2 Bayer Leverkusen"
[1]=>
string(17) "Manchester United"
[2]=>
string(1) "4"
[3]=>
string(1) "2"
[4]=>
string(16) "Bayer Leverkusen"
}
如果你需要更多的i18n,可以想象[A-Z]
可以用\p{Lu}
替换(如果你在模式上使用/u
修饰符来启用UTF-8模式),{{1 },甚至[^\d\s]
。但是呃。