Есть переменная с таким содержанием:
string(544) "
Seats: 11;12;
Name: qqqq;wwww;
Start: Прешов, АВ Košická 2725/2
End: Мукачево, АЗ Лавковская, 1б
Date: 2019-06-22
Time: 09:40 PM
"
Мне из всех этих данных нужно извлечь и сохранить
Seats: 11;12;
только без слова "Seats: ". В итоге, для дальнейшей работы, я хотел бы получить массив:
[0]=>11
[1]=>12
Перепробовал множество вариантов, не смог решить этот вопрос.
Вот последнее, что я смог сделать, но не работает:
$re = '/\s+([\d;]+)/';
$str = $item['meta'];
$wt_name = preg_split($re, $str);
Результат:
array(3) { [0]=>
string(260) "
Seats: 11;12;
Name: qqq;www;
Start: Прешов,
АВ Košická" [1]=>
string(111) "/2
End: Мукачево,
АЗ Лавковская,"
[2]=> string(166)
"б
Date: 2019-06-24
Time: 09:40 PM
" }
Пожалуйста, помогите написать правильное регулярное выражение
зачем вы делаете split
? вам нужен preg_match
и если надо строку seats
то и используйте ее в выражении
preg_match("/Seats: (.*);$/m", $txt, $matches);
должны получить искомые 11;12;
в $matches[1]
, а дальше можете сделать explode()
по разделителю ;
В итоге, для дальнейшей работы, я хотел бы получить массив:
[0]=>11
[1]=>12
$str = 'Seats: 11;12;
Name: qqqq;wwww;
Start: Прешов, АВ Košická 2725/2
End: Мукачево, АЗ Лавковская, 1б
Date: 2019-06-22
Time: 09:40 PM';
if (preg_match('~Seats:\h*(\d+);(\d+)~', $str, $arr)) {
array_shift($arr);
}
var_dump($arr);
Демо PHP
Всю работу можно выполнить в явном виде:
$str = "Seats: 11;12;
Name: qqqq;wwww;
Start: Прешов, АВ Košická 2725/2
End: Мукачево, АЗ Лавковская, 1б
Date: 2019-06-22
Time: 09:40 PM";
$lines = explode("\n", trim($str));
$data = array_reduce(array_filter($lines), function($res, $line){
[$key, $value] = preg_split('#\s*:\s*#', $line, 2);
$res[$key] = $value;
return $res;
}, []);
var_dump($data);
// Далее, можно работать с полями, в зависимости от их назначения и формата
preg_match_all('#(\d+);#', $data['Seats'], $m);
var_dump($m[1]);
3v4l
array(6) {
["Seats"]=>
string(6) "11;12;"
["Name"]=>
string(10) "qqqq;wwww;"
["Start"]=>
string(35) "Прешов, АВ Košická 2725/2"
["End"]=>
string(48) "Мукачево, АЗ Лавковская, 1б"
["Date"]=>
string(10) "2019-06-22"
["Time"]=>
string(8) "09:40 PM"
}
array(2) {
[0]=>
string(2) "11"
[1]=>
string(2) "12"
}
Можно извлечь все числа, разделённые точкой с запятой после Seats:
с помощью одного регулярного выражения:
if (preg_match_all('~(?:\G(?!^);|Seats:\s*)\K\d+~',$txt,$matches)) {
print_r($matches[0]);
}
См. пример кода в действии и демо регулярного выражения.
Подробности
(?:\G(?!^);|Seats:\s*)
- конец предыдущего совпадения и точка с запятой или Seats: и 0+ пробельных символов\K
- оператор, очищающий буфер целого совпадения\d+
- 1 и более цифр.Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Я установил ubuntu и развернул проект у себя на локалке, после запуска выдает слелующую ошибку:
Подключил обработчик для получения вебхука с typeformcom Запрос уходит в формате JSON, в $_request, $_post, php://input - пусто