У меня есть более тысячи отзывов в строке. Меня попросили посмотреть, могу ли я получить среднюю ставку от каждого автора. Пример строки приведен ниже. Я выделил содержимое, которое мне нужно извлечь в массив.
Империя Буша Пастуха (Times p54 — 4 * Дэвид Синклер) Медведь гризли — Змеиные сессии, Гайд-парк, Лондон (Независимая газета, стр. 17 — 4 * Элиза Брей) Blondie — Kenwood House (вс p69 — 4 * JJДжефф Твиди — Юнион Чапел, Лондон (Независимая газета, стр. 17 — 4 * Энджоли ЛистонТони Беннетт — Альберт Холл, Лондон (Times p68 — 4 * Клайв Дэвис, Стандарт р40 — 5 * Джек Массарик
Есть ли в любом случае взорвать строку на *
вернуться на один символ и перейти к словам.
Я знаю, что будут шансы, но они могут быть удалены позже. есть ли способ использования preg_split
или же explode
?
найдите одно число, за которым следует звездочка, затем два слова, разделенные пробелом
preg_match_all("/\d\* ?\w* ?\w*/", $input_lines, $output_array);
и вот пример ссылки http://www.phpliveregex.com/p/7Ty
ваш выходной массив будет выглядеть так
Array
(
[0] => Array
(
[0] => 4* David Sinclair
[1] => 4* Elisa Bray
[2] => 4* JJ
[3] => 4* Enjoli Liston
[4] => 4* Clive Davis
[5] => 5* Jack Massarick
)
)
РЕДАКТИРОВАТЬ::
для добавления необязательного десятичного знака используйте это /\d(\.\d{1,2})?\* ?\w* ?\w*/
Вы можете использовать регулярные выражения что-то вроде:
([0-9]+) *\* *([^\)]+)
Должен сделать свое дело.
Это ищет 1 или более цифр, (сохраняя их), затем ноль или более отброшенных пробелов, литерал *
за которым следует любое количество пропущенных пробелов, за которым следует любое количество любых символов, кроме буквального )
спасая их.