У меня есть строка в формате, показанном ниже, и я хочу извлечь следующие данные:
— Домашняя команда
— выездная команда
— счет домашней команды
— счет команды гостей
Мне удалось найти домашний счет и счет гостей, но мне трудно получить названия команд.
$str = " 20.45 Manchester United 4-2 Bayer Leverkusen";
preg_match('/(\d)-(\d)/', $str, $matches);
Заранее спасибо.
Если текст всегда будет одинаковым с несколькими пробелами между полями, вы можете воспользоваться этим.
[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), [^\d\s]
, или даже \S
, Но э.
Других решений пока нет …